我试图这样做: http://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name
使用此款式
这被保存为common / abstract.py
class OtherModel(models.Model):
something = Charfield(max_length=100)
class Meta:
abstract = True
class Base(models.Model):
fk_model = models.ForeignKey(OtherModel, related_name="%(app_label)s_%(class)s_related")
class Meta:
abstract = True
然后我将其导入另一个文件。我们称之为app / models.py
from common.abstract import Base
class ChildB(Base):
pass
我已经安装了'app'而不是'common'。它会在没有FK或M2M关系的情况下很好地导入,但是当我尝试添加它时,我收到此错误:
/lib/python2.6/site-packages/django/db/models/fields/related.py“,第808行, init 声明不要。 meta.abstract,“%s无法定义与抽象类%s的关系”%(self。 class 。 _name__,to._meta.object_name) AssertionError:ForeignKey无法定义与抽象类OtherModel
的关系请告知....如果您有任何疑问或不理解我正在解释的内容,也请告诉我。我使用的文件非常复杂,因此我不想发布整个文件,因为我知道它正在破坏这一关系。
答案 0 :(得分:2)
您不能与抽象模型建立关系,但这是您尝试做的事情(ManyToManyField
到OtherModel
)。如果您想要完成这项工作,则需要从abstract = True
移除OtherModel
并将common
添加到INSTALLED_APPS
!
如果要与OtherModel
的子类中的Base
的不同子类相关联,则需要在子类上定义关系,而不是在抽象模型上定义!
答案 1 :(得分:1)
我想出了问题.....
这样可行:
from django.db import models
class CommonInfo(models.Model):
name = models.CharField(max_length=100)
class Base(models.Model):
m2m = models.ForeignKey(CommonInfo, related_name="%(app_label)s_%(class)s_related")
class Meta:
abstract = True
class ChildA(Base):
pass
这会给你错误:AssertionError:ForeignKey无法定义与抽象类OtherModel 的关系。这是因为你不能在指向另一个抽象的抽象上有FK关系或M2M关系类。
from django.db import models
class CommonInfo(models.Model):
class Meta:
abstract = True
name = models.CharField(max_length=100)
class Base(models.Model):
m2m = models.ForeignKey(CommonInfo, related_name="%(app_label)s_%(class)s_related")
class Meta:
abstract = True
class ChildA(Base):
pass
这对我来说是个悲伤的消息。确实是悲伤的消息我希望我的伤心新闻能让别人受益。