Cercando di risolvere un problema interessante in questo momento.Django ModelForm Validation
Ho un modello Django con un campo image
non richiesto, ma è impostato su un valore predefinito quando viene creata una nuova istanza di modello.
class Product(models.Model):
image = models.ImageField(upload_to='/image/directory/', default='/default/image/path/', blank=True)
ho anche un ModelForm sulla base di quel modello, che include il campo image
, e che ha un po 'di convalida personalizzata.
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ('image',)
def clean_image(self):
image = self.cleaned_data.get('image', False)
if image:
# validate image
return None
Il problema è che per the docs, chiamando is_valid()
su un ModelForm
trigger validazione dei modelli, oltre a formare la convalida, in modo che quando un utente invia il modulo tipo senza immagine, il mio codice di convalida modulo personalizzato tenta di convalidare il modello predefinito immagine, piuttosto che non fare nulla come dovrebbe.
Come faccio a non fare nulla a meno che il modulo stesso non abbia un valore per il campo image
?
'blank = True' è una convalida a livello di database e' null = True' è una convalida a livello di modello, quindi è necessario aggiungere anche 'null = True'. – karthikr
@karthikr: Non è vero. 'null è puramente correlato al database, mentre vuoto è correlato alla validazione. Se un campo ha spazio = True, la convalida del modulo consentirà l'inserimento di un valore vuoto. Se un campo ha vuoti = Falso, il campo sarà richiesto. [Maggiori informazioni qui.] (Https://docs.djangoproject.com/en/dev/ref/models/fields/#blanko) –
@karthikr Penso che potresti voler ricontrollare questo. Da docs 'null è puramente correlato al database, mentre vuoto è correlato alla validazione. Https://docs.djangoproject.com/en/dev/ref/models/fields/#field-options –