2014-02-21 46 views
0

我有一个表单来注册客户端。在那里我有一个ESIdentityCardNumberField来验证NIF/CIF/NIE,但这种形式也被认为允许“其他”国家卡ID,所以我添加了另一个字段来获取它们。如何使ESIdentityCardNumberField允许空白

所以,我需要重写ESIdentityCardNumberField验证,以允许空白值,如果指定了其他卡ID。

我怎样才能得到这个?

class Client(models.Model): 
    name = models.CharField() 
    ESCardId = models.CharField(blank=True, null=True) 
    otherCardsIds = models.CharField(blank=True, null=True) 

class ClientForm(forms.ModelForm): 
    ESCardId= ESIdentityCardNumberField() 


class ClientAdmin(admin.ModelAdmin): 
    form = ClientForm 
    fields = ['name', 'ESCardID', 'otherCardsIds'] 

    def save_model(self, request, obj, form, change): 
     if obj.ESCardId is None and obj.otherCardsIds is None: 
      raise ValidationError("Enter a spanish cardID or any other.") 

在此先感谢。

回答

0

我注意到不好的观点。请勿使用表单字段,但使用验证器,例如:

class ClientForm(forms.ModelForm): 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     CIF = cleaned_data.get('CIF') 
     oID = cleaned_data.get('otherCIF') 
     if CIF == "" and oID == "": 
      raise forms.ValidationError("Introduce one card id") 
     if CIF != "" and oID != "": 
      raise forms.ValidationError("Introduce ONLY one card id") 
     if CIF != "": 
      myValidator = ESIdentityCardNumberField() 
      myValidator.clean(CIF) 

     return cleaned_data 
    class Meta: 
     model = Client 
相关问题