2010-11-05 6 views
0

J'ai un EmailField(primary_key=True). J'utilise un ModelForm pour rendre un formulaire à un utilisateur et sur le retour j'appelle form.is_valid().Django ModelForm is_valid() types d'erreur

Je vois deux types d'erreurs sur ce champ. L'une est une contrainte de valeur unique sur la clé primaire (cette adresse email existe déjà). L'autre est une erreur d'adresse email invalide.

Je voudrais répondre différemment à chaque erreur. Existe-t-il un moyen facile d'identifier que l'échec de validation était dû à une erreur de format d'entrée réelle par rapport à une contrainte unique?

Répondre

2

J'ai compris comment réaliser ce que je voulais. Mon but était d'éviter la contrainte unique afin que je puisse ignorer silencieusement la soumission du formulaire et réussir (du point de vue de l'utilisateur, puisque sa soumission était un noop) dans le cas d'une adresse e-mail en double soumise. D'abord remplacer la méthode validate_unique sur ma définition ModelForm.

from django.forms import ModelForm 
from apps.announcer.models import Subscriber 

class SubscribeForm(ModelForm): 
    class Meta: 
     model = Subscriber 
     exclude = ('created',) 

    def validate_unique(self): 
     pass 

Parce que la méthode validate_unique a été converti en noop la vue devra effectuer quelle que soit la validation dont il a besoin. Donc, au lieu d'appeler form.save(), appelez entity = form.save(commit=False). Effectuez la validation nécessaire sur l'entité et, si nécessaire, appelez entity.save().

1

Pourriez-vous d'abord vérifier une clé préexistante, puis appeler le is_valid()?

+0

est-il un moyen de faire is_valid sans effectuer la validation de la contrainte unique? –

+0

IIRC, la contrainte unique est effectuée par la base de données, chaque fois que vous frappez la base de données, donc probablement pas. –

Questions connexes