Как исключить удаленные записи при сохранении модели?

Я использую 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 и один экземпляр удаляется одновременно с обновлением другого. Как я могу это исправить?

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