tipos superusuario personalizados modelos formularios example ejemplos datos crear avanzados python django django-forms django-admin django-validation

python - superusuario - tipos de formularios en django



ValidaciĆ³n personalizada en el administrador de Django. (2)

Por lo general, solo desea definir un método clean () en el propio modelo.

https://docs.djangoproject.com/en/2.1/ref/models/instances/#validating-objects

from django.core.exceptions import ValidationError class Lecture(models.Model): topic = models.CharField(max_length=100) speaker = models.CharField(max_length=100) start_date = models.DateField() end_date = models.DateField() def clean(self): if self.start_date > self.end_date:: raise ValidationError("Dates are incorrect")

Algo así funcionará en el administrador de django sin necesidad de crear una clase de formulario.

Tengo una aplicación Django muy simple para grabar las conferencias dadas a mis colegas. Ya que es bastante elemental, estoy usando el administrador de Django. Aquí está mi 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()

Debo asegurarme de que nadie ingrese la fecha de inicio después de la fecha de finalización en los formularios de administración, así que leí los documentos de django para la validación personalizada en el administrador e implementé lo siguiente en mi 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)

Sin embargo, esto no tiene ningún efecto en mi administrador y puedo guardar clases en las que start_date es después de end_date como se ve en la imagen:

Qué estoy haciendo mal ??


Tienes un problema de sangría. Su método de clean está sangrado dentro de la clase Meta del formulario. Retrocede un nivel. Además, asegúrese de que la instrucción de return esté sangrada dentro del método.