Chaque entrée "Time Plage" de la TimeClass dépend l'une de l'autre.Validation multi-objets dépendants dans admin django
Ils ne peuvent pas se chevaucher et 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]
Problème: Je peux modifier/ajouter plusieurs années TimeRangeClass à la fois par l'administrateur. Mais étant donné que la méthode models.Model clean n'évalue qu'un changement à la fois, je ne peux pas valider plusieurs modifications les unes par rapport aux autres.
Exemple:
Enregistrer un Entrée1 & inscription2 sans conflit
changement inscription2 pour produire une erreur de validation
Adjust Entrée1 (au lieu de # 2) de sorte qu'ils ne se chevauchent pas
Ceci ne s'enregistre pas car aucun des changements n'est écrit e db.
Je suis à la recherche d'une solution de contournement.
Vous devriez donner une explication plus concrète du problème. Où/Comment changez-vous l'entrée 2? Depuis l'interface d'administration, à partir de la vue ou d'un formulaire? – Titusz