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