(fields.E300) 字段定义与模型的关系,该模型要么未安装,要么是抽象的
(fields.E300) Field defines a relation with model which is either not installed, or is abstract
我的 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 应用程序
中选择这些值
这个问题可以解决吗?
FK定义中的相关模型名称应添加应用名称:
czas = models.ForeignKey('firstapp.Godzina')
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
为可能遇到类似问题的用户提供更清晰的信息。
如果应用程序名称和模型名称相同,可能会造成混淆,例如
应用程序名称是 "student",在 student/models 中,您有一个名为 class
学生,继承models.Model
占位符实现:
model_variable = models.ForeignKey('the_appname.the_model_class_name)
更精确的例子:
应用程序名称为学生,模型名称也是学生,另一个应用程序出勤,属性为 "student_id"
student_id = models.ForeignKey('student.student)
从一个应用程序到另一个应用程序使用模型时的通用信息是
model_variable = models.ForeignKey('the_appname.the_model_class_name')
在这种情况下,对于 Django 项目“aplikacja”,对于第二个应用程序(UserProfile),它应该是:
czas = models.ForeignKey(‘Godzina.Godzina')
在此之后,我建议您删除 migrations 文件夹中的所有文件(在您创建的应用程序下:Godzina 和 UserProfile),除了 init 文件。同时删除 SQLite 文件。然后运行
Python manage.py makemigrations
和
python manage.py 迁移。
这些步骤很可能会解决问题。
如果你是通过搜索来到这里的,它可能会帮助你提醒你检查你是否记得让你的 class 成为一个模型(以防万一,你像我一样,盲目地寻找更复杂的原因几分钟!)
如果您没有从 models.Model
继承,您将收到 OP 描述的错误:
class Godzina:
...
确保你有:
class Godzina(models.Model):
...
运行 进入
中的同一问题
django-simple-history==2.10.0,
django=2.2.13
要修复它,我需要指明型号而不是使用它的名称 str 'Godzina'
class UserProfile(models.Model):
czas = models.ForeignKey(Godzina, on_delete=xxxxx)
与 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'.
我有同样的错误,这是一个问题,因为 类.
的名称相似
我的 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 应用程序
中选择这些值这个问题可以解决吗?
FK定义中的相关模型名称应添加应用名称:
czas = models.ForeignKey('firstapp.Godzina')
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
为可能遇到类似问题的用户提供更清晰的信息。 如果应用程序名称和模型名称相同,可能会造成混淆,例如 应用程序名称是 "student",在 student/models 中,您有一个名为 class 学生,继承models.Model
占位符实现:
model_variable = models.ForeignKey('the_appname.the_model_class_name)
更精确的例子: 应用程序名称为学生,模型名称也是学生,另一个应用程序出勤,属性为 "student_id"
student_id = models.ForeignKey('student.student)
从一个应用程序到另一个应用程序使用模型时的通用信息是
model_variable = models.ForeignKey('the_appname.the_model_class_name')
在这种情况下,对于 Django 项目“aplikacja”,对于第二个应用程序(UserProfile),它应该是:
czas = models.ForeignKey(‘Godzina.Godzina')
在此之后,我建议您删除 migrations 文件夹中的所有文件(在您创建的应用程序下:Godzina 和 UserProfile),除了 init 文件。同时删除 SQLite 文件。然后运行 Python manage.py makemigrations 和 python manage.py 迁移。 这些步骤很可能会解决问题。
如果你是通过搜索来到这里的,它可能会帮助你提醒你检查你是否记得让你的 class 成为一个模型(以防万一,你像我一样,盲目地寻找更复杂的原因几分钟!)
如果您没有从 models.Model
继承,您将收到 OP 描述的错误:
class Godzina:
...
确保你有:
class Godzina(models.Model):
...
运行 进入
中的同一问题django-simple-history==2.10.0, django=2.2.13
要修复它,我需要指明型号而不是使用它的名称 str 'Godzina'
class UserProfile(models.Model):
czas = models.ForeignKey(Godzina, on_delete=xxxxx)
与 OP 场景无关,但会导致上述相同错误的一个潜在错误是在 Meta
中指定了错误的 app_labelclass 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'.
我有同样的错误,这是一个问题,因为 类.
的名称相似