È anche possibile eseguire questa operazione utilizzando il modello se si conosce la convalida si applicherà a tutti gli oggetti di questa classe . Per utilizzare il sotto a livello di modulo, utilizzare clean_data. Qui è un diritto di esempio da documentazione Django con ValidationError
:
class Article(models.Model):
status = models.CharField(max_length=75, blank=False, null=False)
pub_date = models.CharField(max_length=75, blank=False, null=False)
def clean(self):
# Don't allow draft entries to have a pub_date.
if self.status == 'draft' and self.pub_date is not None:
raise ValidationError('Draft entries may not have a publication date.')
# Set the pub_date for published items if it hasn't been set already.
if self.status == 'published' and self.pub_date is None:
self.pub_date = datetime.date.today()
Riferimento: Model Instance Clean, Django Validators
Ecco un esempio di forme:
class SimpleForm(forms.ModelForm):
def clean(self):
cleaned_data = super(SimpleForm, self).clean() # Get the cleaned data from default clean, returns cleaned_data
field1 = cleaned_data.get("field1")
field2 = cleaned_data.get("field2"),
if not field1 and not field2:
raise forms.ValidationError('Please fill in both fields.')
return cleaned_data
Riferimento: Form & Field Validation
Nota: Se facendo questo per un plugin Django CMS, assicurarsi di eseguire l'override del metodo pulito (auto) nella definizione models.py per il plugin, piuttosto che in forms.py. –