【发布时间】:2016-04-08 14:53:13
【问题描述】:
TimeClass 的每个“时间范围”条目相互依赖。
它们不能重叠,并且 start_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 clean 方法一次只评估 1 个更改,我无法验证多个编辑相互之间的关系。
例子:
保存条目 1 和条目 2 而不发生冲突
更改 Entry2 以产生验证错误
调整 Entry1(而不是 #2),使其不重叠
这不会注册,因为这两个更改都不会写入数据库。
我正在寻找解决方法。
【问题讨论】:
-
你应该对问题给出更具体的解释。您在哪里/如何更改条目 #2?从管理界面、视图还是表单?
标签: python django django-models django-admin django-validation