我的Django项目中安装了2个应用程序“aplikacja”
第一个名为:“Godzina”
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')
,第二个命名为:“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应用程序中选择这些值
有可能解决这个问题吗?
答案 0 :(得分:26)
您应该将应用名称添加到FK定义中的相关型号名称:
czas = models.ForeignKey('firstapp.Godzina')
答案 1 :(得分:2)
从一个应用程序到另一个应用程序使用模型时的一般信息是
model_variable = models.ForeignKey('the_appname.the_model_class_name')
在这种情况下,对于Django项目“ aplikacja”,对于第二个应用程序(UserProfile),它应为:
czas = models.ForeignKey(‘Godzina.Godzina')
在此之后,我建议您删除迁移文件夹(在您创建的应用程序下:Godzina和UserProfile下)中的所有文件(初始化文件除外)。还要删除SQLite文件。然后跑 Python manage.py makemigrations 和 python manage.py迁移。 这些步骤很可能可以解决问题。
答案 2 :(得分:1)
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
答案 3 :(得分:1)
如果您是通过搜索到达这里的,可能会有助于提醒您检查自己是否记得让班级成为模型(以防万一,像我一样,您在几分钟之内一直在盲目寻找更复杂的原因! )
如果您不是从models.Model
继承,则会得到OP描述的错误:
class Godzina:
...
确保您拥有:
class Godzina(models.Model):
...
答案 4 :(得分:1)
我遇到了同样的错误,这是由于类的名称相似而导致的问题。
答案 5 :(得分:0)
为可能遇到类似问题的用户提供更清晰的说明。 例如,应用名称和型号名称相同可能会造成混淆 该应用程序的名称为“学生”,并且在学生/模型中,您有一个名为 学生,继承模型。
占位符的实现:
model_variable = models.ForeignKey('the_appname.the_model_class_name)
更精确的示例: 一个应用程序名称为学生,模型名称也为Student,另一个应用程序出勤,属性为“ student_id”
student_id = models.ForeignKey('student.student)
答案 6 :(得分:0)
遇到相同的问题
django-simple-history == 2.10.0, django = 2.2.13
要修复它,我需要指出模型,而不是使用名称str'Godzina'
class UserProfile(models.Model):
czas = models.ForeignKey(Godzina, on_delete=xxxxx)
答案 7 :(得分:0)
与OP场景无关,但一个可能导致上述错误的潜在错误是在Meta中指定了错误的app_label
class ABC(models.Model):
foo = models.TextField()
class Meta:
app_label = 'appp'
class XYZ(models.Model):
abc = models.ForeignKey('ABC', on_delete=models.CASCADE)
class Meta:
app_label = 'app'
错误:
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:
ERRORS:
app.XYZ.abc: (fields.E300) Field defines a relation with model 'ABC', which is either not installed, or is abstract.
app.XYZ.abc: (fields.E307) The field app.XYZ.abc was declared with a lazy reference to 'app.abc', but app 'app' doesn't provide model 'abc'.