【问题标题】:<class> has a relation with model <class>, which has either not been installed or is abstract<class> 与模型 <class> 有关系,该模型要么未安装,要么是抽象的
【发布时间】:2012-07-06 10:34:04
【问题描述】:
from django.db import models    
from audit_trail.audit import AuditTrail    
from my_base_model.classes import BaseUuidModel                                    
from my_class_base import BaseClass

class Mini(BaseMaternalVisitModel):
    my_class_base = models.ForeignKey(BaseClass) 

class MiniHu(BaseUuidModel): 
    myclass = models.ForeignKey(Mini)   

    class Meta:
         app_label="classes"

当我运行 python manage.py validate 时出现此错误

<MiniHu> has a relation with model <Mini>, which has either not been installed or is abstract.

【问题讨论】:

  • 什么是BaseMaternalVisitModel?您是否已同步并实际创建了表?
  • BaseClass 是抽象类吗?

标签: django


【解决方案1】:

添加:

class Meta:
    app_label="classes"

给 Mini 上课,这样他们就可以在同一个应用程序中找到彼此。

【讨论】:

    【解决方案2】:

    您是否运行过python manage.py syncdb 来创建必要的数据库表?您还提到 Mini 类是 BaseMaternalVisitModel 的子类,您还没有在此处导入它(尽管如果您遇到该错误,我猜您在此处发布时只是忘记了该行)。

    当您对 Django 模型进行子类化时,您应该注意“普通”模型和“抽象”模型之间的区别。当一个模型是“抽象的”时,它不是用syncdb 创建的——只有当你对它进行子类化时,在这种情况下,只有子类化的模型会在数据库中创建,包含它自己的所有字段以及它从其父类继承的字段:抽象类。这就是“未安装或抽象”错误的原因:就数据库而言,抽象模型不存在。 Django 正在尝试访问数据库中不存在的模型:可能是因为您还没有运行 syncdb 并创建它,或者因为它是一个抽象模型并且在数据库中不存在。

    【讨论】:

      猜你喜欢
      • 2013-04-20
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 2022-01-25
      • 2020-08-03
      • 1970-01-01
      • 2014-01-29
      • 2017-01-21
      相关资源
      最近更新 更多