Каждая запись временного диапазона TimeClass зависит друг от друга.зависимая проверка нескольких объектов в django admin
Они не могут пересекаться и start_time < end_time.
models.py
class Xyz(models.Model):
...
class TimeRangeClass(models.Model)
start_time = models.TimeField()
end_time = models.TimeField()
xyz = models.ForeignKey(Xyz)
# other fields here
def clean(self):
# Here I loop through TimeRangeClass.objects.all() and
# check for conflicts through my custom "my_validator_method".
# If there is a conflict I throw an error
#(I've since modified it to just be one single query as per Titusz advice)
for each in TimeRangeClass.objects.filter(xyz=self.xyz).exclude(id=self.id):
my_validator_method(start_time1=self.start_time,
end_time1=self.end_time,
start_time2=each.start_time,
end_time2=each.end_time)
admin.py
from .models import TimeRangeClass, Xyz
class TimeRangeClassInLine(admin.TabularInline):
model = TimeRangeClass
extra = 3
@admin.register(Xyz)
class Xyz(admin.ModelAdmin):
exclude = []
inlines = [TimeRangeClassInLine]
Проблема: Я могу редактировать/добавить несколько TimeRangeClass с полуслова через администратора. Но, учитывая, что модели. Метод очистки модели только оценивает 1 изменение за раз, я не могу проверять несколько изменений друг против друга.
Пример:
сохранить entry1 & entry2 без конфликта
Изменение entry2 для получения ошибки проверки
Adjust entry1 (вместо # 2), чтобы они не перекрывали друг друга
Это не регистрируется, потому что ни одно изменение не записано на th e db.
Я ищу обходное решение.
Вы должны дать более конкретное объяснение проблемы. Где/Как вы меняете запись №2? Из интерфейса администратора, из вида или формы? – Titusz