Как исключить удаленные записи при сохранении модели?
Я использую django.contrib.postgres.field.DateRangeField
в модели с ограничением исключения, чтобы убедиться, что два диапазона дат не пересекаются:
class MyModel(models.Model):
date_range = DateRangeField()
class Meta:
constraints = [
ExclusionConstraint(
name='exclude_overlapping_periods',
expressions=[
('date_range', RangeOperators.OVERLAPS),
],
),
]
Это работает, но с ошибкой integrityError
(как и должно быть).
Я хочу проверить модель с помощью чистого метода, чтобы сделать удобный для пользователя ответ:
def clean(self):
error_dict = {}
if MyModel.objects.exclude(id=self.id).filter(
date_range__overlap=self.date_range):
error_dict['date_range'] = ValidationError(
'Range can not overlap with an existing period.',
code='overlap_period')
if error_dict:
raise ValidationError(error_dict)
Это работает, но не в том случае, когда я использую formset
и один экземпляр удаляется одновременно с обновлением другого. Как я могу это исправить?