gpt4 book ai didi

具有unique_together的Django多态模型

转载 作者:行者123 更新时间:2023-12-04 04:35:45 27 4
gpt4 key购买 nike

可以说我有这些基本模型:

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'

最佳答案

这是我处理此问题的方法。请记住,我将PostGres用作数据库,并且我不知道其他数据库是否也会出现相同的问题(尽管我猜确实是这样)。

唯一在一起的约束只能应用于PostGres中的单个表或 View 。这意味着Django/Django-polymorphic无法在继承层次结构中的Django模型的父表和子表中的字段组合上表达数据库强制的唯一约束。

如果您确实希望数据库对这些字段施加唯一约束,则可以执行以下两项操作之一:

  • 将唯一约束中涉及的任何父模型字段复制到子表中,并在子字段和从父对象或
  • 复制的字段上表达唯一约束
  • 在子级上创建一个 View ,该 View 既包含父级的字段又包含子级的字段,并对此 View 表达唯一约束。

  • 您将必须手动执行此操作,或者开发自己的框架以自动插入/更改/删除这些约束。

    关于具有unique_together的Django多态模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799949/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com