Python 如何在django中定义泛型模型时解决循环依赖
我想定义一个通用模型,可以在任何应用程序中使用。以下是我的通用模型的定义:-Python 如何在django中定义泛型模型时解决循环依赖,python,django,generics,django-models,Python,Django,Generics,Django Models,我想定义一个通用模型,可以在任何应用程序中使用。以下是我的通用模型的定义:- User = settings.AUTH_USER_MODEL # This mixin is used to track the user, who has created this object. class OwnedModel(models.Model): owner = ForeignKey(to=User, null=True, editable=False)
User = settings.AUTH_USER_MODEL
# This mixin is used to track the user, who has created this object.
class OwnedModel(models.Model):
owner = ForeignKey(to=User, null=True, editable=False)
class Meta:
abstract = True
# AreaOrVillage extending this model, will also get owner field, which
# refer to User.
class AreaOrVillage(OwnedModel):
area_village_name = LocationIdentifierField(name="areaOrVillageName", verbose_name="Area/Village:", blank=False, null=False)
area_village_code = LocationCodeField(name="areaOrVillageCode", verbose_name="Area/Village Code", null=True, blank=True)
zipcode = ZipCodeField(verbose_name="ZipCode", null=False, blank=False)
# It's another model, referred by this model
tehsil = models.ForeignKey(to=Tehsil, related_name="areas_or_villages")
class Meta:
verbose_name_plural = "Areas/Villages"
unique_together = ("tehsil", "areaOrVillageName")
ordering = ("tehsil", "areaOrVillageName")
app_label = 'location_app'
def __str__(self):
text = self.to_str()
return "{}{}{}".format(text, ", " if text and self.tehsil else "",
self.tehsil.__str__() if self.tehsil else "")
def to_str(self):
return "%s" %(self.areaOrVillageName or self.areaOrVillageCode)
现在,在我的django项目中,我覆盖了默认用户模型,如下所示(它使用了上面定义的通用模型):-
现在,它引入了循环依赖问题,因为泛型模型依赖于用户,为了跟踪它们的创建者,用户定义也使用泛型模型,因此针对db运行迁移会带来问题
django.db.utils.ProgrammingError: relation "users_pss_user" does not exist
有没有更好的办法来解决这个问题
提前感谢。外键中的
to
字段:
如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身:
(增加重点)
例如,从代码中,可以执行以下操作:
user_village = ForeignKey(to='AreaOrVillage', null=False, related_name="gram_vasi")
在所有
ForeignKey
字段上使用该语法,您将避免任何循环引用。这给了我一个错误:users.PSS\u User.User\u village:(fields.E300)字段定义了与未安装的模型“AreaOrVillage”的关系,或者是抽象的。您是否对所有ForeignKey
字段都使用了此语法?是的,我对ForeignKey使用了此语法。顺便说一句,应用程序名也必须包括在内,所以,我在ForeignKey()的参数中设置了'appname.modelname'
user_village = ForeignKey(to='AreaOrVillage', null=False, related_name="gram_vasi")