假设我有这些基本模型:
class Trackable(PolymorphicModel):
uuid = UUIDField(unique=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
儿童模特扩展了它:
class Like(Trackable):
content = models.ForeignKey(Content, related_name='likes')
class Meta:
unique_together = ['content', 'created_by']
当我运行迁移时,它抱怨:
django.db.models.fields.FieldDoesNotExist: Like has no field named u'created_by'
答案 0 :(得分:2)
以下是我处理此问题的方法。请记住,我使用PostGres作为我的数据库,我不知道其他数据库是否会出现同样的问题(虽然我猜他们会这样做)。
唯一一起约束只能应用于PostGres中的单个表或视图。这意味着开箱即用的Django / Django-polymorphic无法对继承层次结构中父表和Django模型的子表中的字段组合表示数据库强制的唯一约束。
如果您确实希望数据库强制执行这些字段的唯一约束,您可以执行以下两项操作之一:
您必须手动执行此操作,或者开发自己的框架以自动插入/更改/删除这些约束。