【问题标题】:Django - create unique key that contains other models fieldDjango - 创建包含其他模型字段的唯一键
【发布时间】:2017-06-22 07:18:21
【问题描述】:

我正在尝试为模型创建“unique_together”元,但不是来自当前模型的两个字段,而是其中一个是其他模型的字段(这是当前模型中的外键): 我希望“项目”模型具有包含其“标识符”字段和规范的容器 ID 的 unique_together。 Spec 是“Item”中的外键。 尝试过这样的事情,但我得到“未解决的参考规范......”

class Spec(BaseModel):
  title = models.CharField(max_length=200)
  identifier = models.IntegerField(unique=True)
  container = models.ForeignKey(Container, related_name='specs')

class Item(SubmittalsBaseModel, BaseModel, DirtyFieldsMixin):
  title = models.CharField(max_length=200)
  identifier = models.CharField(max_length=200, unique=True)
  spec = models.ForeignKey(Spec, related_name='items')

      class Meta:
        container_id = spec.container
        unique_together = ('identifier', 'container_id')

【问题讨论】:

标签: python django model unique-key


【解决方案1】:

你不能那样做..(至少我认为)..

unique_together 子句直接转换为 SQL 唯一索引。而且您只能在单个表的列上设置这些,而不是多个表的组合。

您可以自己为其添加验证,只需覆盖 validate_unique 方法并将此验证添加到其中。

文档:http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.validate_unique

【讨论】:

猜你喜欢
  • 2021-04-30
  • 1970-01-01
  • 2021-09-13
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 2015-02-01
相关资源
最近更新 更多