【问题标题】:unique_together and M2M fieldunique_together 和 M2M 字段
【发布时间】:2019-03-16 12:13:17
【问题描述】:

我有以下型号:

class CodeSynonyms(models.Model):
    code = models.ForeignKey(Codes, on_delete=models.CASCADE)
    websites = models.ManyToManyField(Websites)
    synonym = models.Charfield(max_length=10)

这个想法是网站使用特定代码的同义词。一个网站不能有几个代码的同义词;不同的网站可以共享特定代码的同义词。以下将不起作用:

class Meta:
unique together = ('code', 'websites')

" 'unique_together' 指的是 ManyToManyField '网站',但在 'unique_together' 中不允许使用 ManyToManyFields"

有没有办法解决这个问题,保持 M2M 关系?拥有它会很方便

【问题讨论】:

  • '不能有几个同义词'?
  • 一个网站只能有一个代码的同义词

标签: django postgresql django-models


【解决方案1】:

您可以在ManyToManyField 中使用through,并通过自定义中间表连接您的多对多关系。然后在此处添加unique_together

class CodeSynonyms(models.Model):
    # add through field
    websites = models.ManyToManyField(Websites, through='WebsiteCode')
    synonym = models.Charfield(max_length=10)

class WebsiteCode(models.Model):
    code_synonym = models.ForeignKey(CodeSynonyms, on_delete=models.CASCADE)
    website = models.ForeignKey(Websites, on_delete=models.CASCADE)
    code = models.ForeignKey(Codes, on_delete=models.CASCADE)

    class Meta:
        unique together = ('code', 'website')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 2013-02-05
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2013-06-25
    相关资源
    最近更新 更多