【问题标题】:How to make ESIdentityCardNumberField allow blank如何使 ESIdentityCardNumberField 允许空白
【发布时间】:2014-02-21 01:28:59
【问题描述】:

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

因此,如果指定了其他卡 ID,我需要覆盖 ESIdentityCardNumberField 验证以允许空白值。

我怎样才能得到这个?

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.")

提前致谢。

【问题讨论】:

    标签: django-localflavor


    【解决方案1】:

    我注意到了不好的观点。不要使用表单字段,而是使用验证器,例如:

    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
    

    【讨论】:

      【解决方案2】:
      ESIdentityCardNumberField(label='DNI/CIF', required=False)
      

      【讨论】:

      • 请提供您的答案的解释,以使其尽可能清晰,不仅是为了 OP,也是为了社区
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2013-01-19
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多