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的。但鉴于models.Model清洁方法只评估1次更改,我无法验证对彼此的多个编辑。
实施例:
保存一个条目1 & ENTRY2无冲突
变化ENTRY2以产生一个验证错误
调整条目1(而不是#2),从而它们不重叠
这没有注册,因为没有写入到第e分贝。
我正在寻找解决方法。
你应该给出一个更具体的问题解释。 你在哪里/如何更改入口#2?从管理界面,从视图或表单? – Titusz