Jeder "time range" -Eintrag der TimeClass ist voneinander abhängig.abhängige Multi-Objekt-Validierung in Django Admin
Sie können nicht überlappen und 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]
Problem: Ich kann auf einmal durch den Admin mehrere TimeRangeClass des bearbeiten/hinzufügen. Aber da die models.clean Methode nur eine Änderung gleichzeitig bewertet, kann ich mehrere Änderungen nicht gegenseitig validieren.
Beispiel:
Speichern ein Entry1 & entry2 ohne Konflikt
ändern entry2 einen Validierungsfehler zu erzeugen
Entry1 einstellen (statt # 2), so dass sie nicht überlappen
Dies wird nicht registriert, da keine Änderungen in th geschrieben werden e db.
Ich bin auf der Suche nach einem Workaround.
Sie sollten eine konkretere Erklärung des Problems geben. Wo/Wie ändern Sie Eintrag Nr. 2? Über die Admin-Oberfläche, aus der Ansicht oder einem Formular? – Titusz