поле уникальности и M2M - PullRequest
2 голосов
/ 16 марта 2019

У меня есть следующая модель:

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, но поля« ManyToManyFields »не допускаются в« unique_together »"

Есть ли способ решитьэто сохранение отношения M2M?Было бы удобно иметь его

1 Ответ

2 голосов
/ 16 марта 2019

вы можете использовать through в ManyToManyField и связывать ваши многие со многими отношениями через пользовательскую промежуточную таблицу.затем добавьте unique_together туда:

class CodeSynonyms(models.Model):
    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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...