Обеспечить уникальность поля для родителя в отношении многие-к-одному - PullRequest
1 голос
/ 28 мая 2019

У меня есть модель Table, которая много-к-одному с моделью Restaurant.Есть ли способ иметь поле reference_label в модели Table, которое должно быть уникальным для ресторана , но не для разных ресторанов?

Короче говоря, я хочу обеспечить уникальность reference_label для таблиц с одинаковым внешним ключом.

Я знаю, что могу просто использовать Table id, но я хочу, чтобы каждый ресторан мог настроить, как они маркируют свои столы.

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Если вы используете Django 2.2, вы можете использовать UniqueConstraint вместо unique_together следующим образом:

class Meta:
    constraints = [
        models.UniqueConstraint(fields=['restaurant', 'reference_label'], name='give_it_some_name')
    ]

В качестве состояния docs :

Вместо этого используйте UniqueConstraint с параметром ограничений.

UniqueConstraint предоставляет больше функциональных возможностей, чем unique_together.unique_together может устареть в будущем.

1 голос
/ 28 мая 2019

Вы можете использовать unique_together:

class Restaurant(models.Model):
    ...

class Table(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
    reference_label = models.CharField(max_length=20)
    ...
    class Meta:
        unique_together = ['restaurant', 'reference_label']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...