django (fields.E300)字段定义与未安装或抽象模型的关系

myzjeezk  于 2023-05-01  发布在  Go
关注(0)|答案(8)|浏览(201)

我有2个应用程序安装在我的Django项目“aplikacja”
第一个名字:《哥斯拉》

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')

第二个名字是:“用户配置文件”

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)

我得到这个错误:
用户配置文件。用户配置文件。czas:(fields.E300)字段定义了与模型“Godzina”的关系,该模型要么未安装,要么是抽象的。
这个错误是什么意思?我想让它,所以用户只能选择这样的时间作为管理员把在应用程序“Godzina”例如,我定义小时19下午,20下午,然后用户可以选择这些值在UserProfile应用程序。
是否有可能解决此问题?

czq61nw1

czq61nw11#

您应该将应用程序名称添加到FK定义中的相关模型名称中:

czas = models.ForeignKey('firstapp.Godzina')
e3bfsja2

e3bfsja22#

将模型从一个应用程序使用到另一个应用程序时的通用信息是

model_variable = models.ForeignKey('the_appname.the_model_class_name')

在这种情况下,对于Django-project“apliikacja”,对于第二个应用程序(UserProfile),它应该是:

czas = models.ForeignKey(‘Godzina.Godzina')

在此之后,我建议您删除迁移文件夹中的所有文件(在您创建的应用程序下:Godzina和UserProfile),但init文件除外。同时删除SQLite文件。然后运行Pythonwww. example www.example.com 。py migrate。这些步骤应该最有可能解决这个问题。

ct2axkht

ct2axkht3#

与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'.
kupeojn6

kupeojn64#

我也遇到了同样的错误,这是一个问题,由于类的名称相似。

ux6nzvsh

ux6nzvsh5#

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
e5njpo68

e5njpo686#

为可能遇到类似问题的用户提供更清晰的信息。如果应用名称和模型名称相同,可能会引起混淆,例如应用名称为“student”,在student/models中,您有一个名为Student的类,它继承了模型。型号
占位保持器实现:

model_variable = models.ForeignKey('the_appname.the_model_class_name)

更精确的例子:应用程序名称为student,模型名称也为Student,另一个应用程序考勤,属性为“student_id”

student_id = models.ForeignKey('student.student)
q5iwbnjs

q5iwbnjs7#

如果你通过搜索到达这里,它可能会帮助你有一个提醒,检查你记得让你的类成为一个模型(以防万一,像我一样,你盲目地寻找更复杂的原因几分钟!)
如果你没有从models.Model继承,你会得到OP描述的错误:

class Godzina:
   ...

请确保您已获得:

class Godzina(models.Model):
   ...
0tdrvxhp

0tdrvxhp8#

遇到同样的问题
django-simple-history==2.10.0,django=2。2.13
要修复它,我需要指示模型,而不是使用它的名称str 'Godzina'

class UserProfile(models.Model):
    czas = models.ForeignKey(Godzina, on_delete=xxxxx)

相关问题