Validation personnalisée dans Django admin
J'ai une question très simple Django app pour enregistrer les conférences donné à mes collègues.Depuis qu'il est tout à fait élémentaires,je suis à l'aide de l'admin de Django lui-même. Voici mon models.py:
#models.py
from django.db import models
class Lecture(models.Model):
topic = models.CharField(max_length=100)
speaker = models.CharField(max_length=100)
start_date = models.DateField()
end_date = models.DateField()
J'ai besoin pour s'assurer que personne n'entre la date de début après la date de fin dans l'admin formes,j'ai donc lu le django documents pour la validation personnalisée dans l'admin et mis en œuvre le suivant dans mon admin.py:
#admin.py
from models import Lecture
from django.contrib import admin
from django import forms
class LectureForm(forms.ModelForm):
class Meta:
model = Lecture
def clean(self):
start_date = self.cleaned_data.get('start_date')
end_date = self.cleaned_data.get('end_date')
if start_date > end_date:
raise forms.ValidationError("Dates are incorrect")
return self.cleaned_data
class LectureAdmin(admin.ModelAdmin):
form = LectureForm
list_display = ('topic', 'speaker', 'start_date', 'end_date')
admin.site.register(Lecture, LectureAdmin)
Toutefois,cela n'a aucun effet sur mon admin et je suis en mesure d'enregistrer des conférences où date_debut est après end_date comme on le voit dans l'image:
Ce que je fais mal ??
Vous devez vous connecter pour publier un commentaire.
Vous avez un problème d'indentation. Votre
clean
méthode est en retrait à l'intérieur de la forme de la Méta-classe. Reculer d'un niveau. Aussi, assurez-vous que lereturn
déclaration est en retrait à l'intérieur de la méthode.clean
méthode n'est appelée que lorsque le formulaire est soumis, et non "lorsque le modèle est sauvé" (si c'est ce que vous voulez, vous êtes à la recherche pour le modèle de validation: docs.djangoproject.com/en/1.7/ref/models/instances/...)... ce Qui ne sera toujours pas valider votre instances de modèle "à chaque fois que le chargement de la page", mais pourquoi voudriez-vous une telle "fonction" de toute façon ?get_changelist_form
méthode pour retourner un formulaire personnalisé à utiliser il.Généralement vous voulez juste de définir une méthode clean() sur le modèle lui-même.
https://docs.djangoproject.com/en/2.1/ref/models/instances/#validating-objects
Quelque chose comme cela va fonctionner dans l'admin de django sans qu'il soit besoin de créer une classe de formulaire.