Как использовать IntegerRange как часть уникального ограничения в модели Django 2.2

Я понимаю, что Django 2.2 устарел. Я сейчас нахожусь в процессе миграции.

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

from django.contrib.postgres.fields.ranges import IntegerRangeField
class ProjectStructureWbsIslandGap():
    series = models.ForeignKey(ProjectStructureFasSeries, on_delete=models.CASCADE)
    is_island = models.BooleanField(default=True) # island or gap
    level_3_range = models.IntegerRangeField(default=(1, 9999)) # 1-9999
    line_number_range = models.IntegerRangeField(default=(1, 9999)) # 1-9999

    class Meta:
        constraints = [
            models.UniqueConstraint(
            fields??
            conditions??
            ),
        ]

Итак, что мне нужно, это два ограничения,

когда создается новая или обновляется существующая запись ProjectStructureWbsIslandGap, в пределах одного родителя series и с одинаковым значением is_island, никакие две записи не могут пересекаться в терминах поля IntegerRangeField level_3_range.

когда создается новая или обновляется существующая запись ProjectStructureWbsIslandGap, в пределах одного родителя series и с одинаковым значением is_island, никакие две записи не могут пересекаться в терминах поля IntegerRangeField line_number_range.

Итак, при ограничении уникальности, как я должен заполнить fields и conditions?

То, что вы пытаетесь сделать, кажется, было добавлено в 3.0 https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/constraints/.

Если вы не используете bulk_update и bulk_create в своем проекте, вы всегда можете переопределить метод .save() в качестве временного решения для обеспечения выполнения ваших условий

Вернуться на верх