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

Ann*_*a K 19 django django-models python-2.7

我的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')
Run Code Online (Sandbox Code Playgroud)

第二个命名为:"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)
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

userprofile.UserProfile.czas: (fields.E300) Field defines a relation with model 'Godzina', which is either not installed, or is abstract.
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我希望用户只能选择管理员放入应用程序"Godzina"的时间.例如,我定义时间为晚上19点,晚上20点,然后用户可以在UserProfile应用程序中选择这些值

有可能解决这个问题吗?

cat*_*ran 30

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

czas = models.ForeignKey('firstapp.Godzina') 
Run Code Online (Sandbox Code Playgroud)

  • 我的设置有相同的系统,但此修复程序对我不起作用. (6认同)
  • 这之所以有效,是因为您可能在不添加“ firstapp”的情况下使用了外键。该模型可能位于相同的models.py文件中。使用外部模型(来自其他应用程序的模型)时,需要指定包含该模型的应用程序。 (3认同)

小智 5

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

\n\n
model_variable = models.ForeignKey('the_appname.the_model_class_name')\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种情况下,对于 Django 项目 \xe2\x80\x9caplikacja\xe2\x80\x9d,对于第二个应用程序(UserProfile),它应该是:

\n\n
czas = models.ForeignKey(\xe2\x80\x98Godzina.Godzina') \n
Run Code Online (Sandbox Code Playgroud)\n\n

之后,我建议您删除迁移文件夹中的所有文件(在您创建的应用程序下:Godzina 和 UserProfile),除了 init 文件。同时删除 SQLite 文件。然后运行\nPython manage.py makemigrations\n和\npython manage.py migrate。\n这些步骤很可能可以解决问题。

\n