2010-05-11 13 views

Répondre

2

Premier jeu requis = Faux pour les champs qui ne doivent pas être définis si vous enregistrez en tant que brouillon. Ensuite, à votre formulaire, ajoutez un champ comme 'save_as_draft' qui est un booléen. Vous avez maintenant besoin d'une méthode pour valider ces champs en fonction de l'état du champ save_as_draft (que l'utilisateur ait coché ou non ce champ). Vous pouvez utiliser une telle méthode:

def is_provided(self, field): 
     value = self.cleaned_data.get(field, None) 
     if value == None or value == '': 
      self._errors[field] = ErrorList([u'This field is required.']) 
      if field in self.cleaned_data: 
       del self.cleaned_data[field] 

Ajouter cette méthode à votre formulaire et l'utiliser dans la méthode propre de formulaire pour valider vos champs. Cela ressemblerait à ceci:

def clean(self): 
    draft = self.cleaned_data.get('save_as_draft', False) 
    if not draft: 
     # User doesn't save a draft so we need to check if required fields are provided 
     req_fields = ['field1', 'field2', 'field3'] 
     for f in req_field: 
      self.is_provided(f) 

return self.cleaned_data 

Si l'utilisateur préfère bouton save_as_draft au lieu de case à cocher, vous devrez modifier votre point de vue et de passer un paramètre au constructeur de votre formulaire selon que l'utilisateur a cliqué le bouton save_as_draft ou tout simplement le bouton Enregistrer. Dans Constructeur de formulaire, enregistrez cet état aa self_ave_as_draft et utilisez-le dans la méthode Form.clean pour vérifier si vous enregistrez le brouillon ou non.

Salutations, Lukasz

+2

En utilisant cette approche, vous devrez faire tous les champs du modèle annulable, ce qui est bon –

Questions connexes