Django: удалить уникальное имя, если в поле задано определенное значение. - PullRequest
0 голосов
/ 06 августа 2020

Что я хочу

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

Мне также нужно разрешить testname быть null заключить, что нет testname для этого теста.

Уникальное поле : testname

Кондиционер : cancelled=True

models.py (упрощенный)

class Test(models.Model):
    testname = models.CharField(max_length=50, null=True, blank=True, unique=True)
    cancelled = models.BooleanField(default=False)

1 Ответ

1 голос
/ 06 августа 2020

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

class Test(models.Model):
    testname = models.CharField(max_length=50, null=True, blank=True)
    cancelled = models.BooleanField(default=False)

    class Meta:
        constraints = (
            UniqueConstraint(fields=['testname'], condition=Q(cancelled=True), name='...'),
        )

Это добавит ограничение в вашу таблицу базы данных, делая условную уникальность поля. В этом случае проверка формы не поддерживается из коробки, поэтому вам нужно добавить ее отдельно.

...