Django Project "aplikacja"に2つのアプリをインストールしました
最初の名前は「ゴジナ」
from Django.db import models
class Godzina (models.Model):
GODZINA = (
('19', '19'),
('20', '20'),
('21', '21'),
)
godzina = models.CharField(max_length=6, choices=GODZINA, verbose_name='jezyk')
2番目の名前は「UserProfile」です。
from Django.db import models
from Django.contrib.auth.models import User
from godzina.models import Godzina
class UserProfile(models.Model):
czas = models.ForeignKey('Godzina')
user = models.OneToOneField(User)
私はそのようなエラーを得ています:
userprofile.UserProfile.czas: (fields.E300) Field defines a relation with model 'Godzina', which is either not installed, or is abstract.
どういう意味ですか?ユーザーが管理者がアプリ「Godzina」に入力するような時間のみを選択できるようにしたいです。たとえば、午後19時、午後20時を定義している場合、ユーザーはこれらの値をUserProfileアプリで選択できます
この問題を修正することは可能ですか?
FK定義の関連モデル名にアプリ名を追加する必要があります。
czas = models.ForeignKey('firstapp.Godzina')
同様の問題が発生する可能性のあるユーザーのためのより明確な。アプリ名とモデル名が同じ場合、たとえばアプリ名が「学生」であり、student/modelsに、モデルを継承するStudentというクラスがある場合、混乱する可能性があります。モデル
プレースホルダーの実装:
model_variable = models.ForeignKey('the_appname.the_model_class_name)
より正確な例:アプリ名をStudent、モデル名をStudentとし、別のアプリの出席を属性 "student_id"で
student_id = models.ForeignKey('student.student)
from Django.db import models
from Django.contrib.auth.models import User
from godzina.models import Godzina
class UserProfile(models.Model):
czas = models.ForeignKey('Godzina')
user = models.OneToOneField(User)
class Meta: #you have to add abstract class
abstract = True