模型父类字段

时间:2016-04-24 13:58:25

标签: django inheritance django-models

我想用模型中的GenericForeignKey字段概括我的工作流程。

所以我创建父类GFKModel:

class GFKModel(models.Model):
    target_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    target_id = models.PositiveIntegerField()
    target = GenericForeignKey('target_content_type', 'target_id')

然后我继承了它:

class Question(GFKModel):
    author = models.ForeignKey(User)
    text = models.TextField()

    class Meta:
        unique_together = ('author', 'target_content_type', 'target_id')

我需要在'author','target_content_type'和'target_id'上添加unique_together约束,但由于迁移错误,我无法做到这一点:

qna.Question: (models.E016) 'unique_together' refers to field 'target_content_type' which is not local to model 'Question'.
HINT: This issue may be caused by multi-table inheritance.

我该怎么做?

2 个答案:

答案 0 :(得分:2)

我错过了GFKModel的声明,因为' abstract'类:

class GFKModel(models.Model):
    target_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    target_id = models.PositiveIntegerField()
    target = GenericForeignKey('target_content_type', 'target_id')

    class Meta:
        abstract = True

现在它按预期工作。

答案 1 :(得分:0)

Alex T的解决方案适用于抽象基础模型

但是,如果您使用具体的基础模型,则cannot use unique_together

有关Django中不同多态类型的更多信息:

https://realpython.com/modeling-polymorphism-django-python/#concrete-base-model