Как использовать 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() в качестве временного решения для обеспечения выполнения ваших условий