Как сделать ESIdentityCardNumberField пустым

У меня есть форма для регистрации клиентов. Там у меня есть один ESIdentityCardNumberField для проверки NIF/CIF/NIE, но считается, что эта форма также позволяет использовать "другие" идентификаторы карт страны, поэтому я добавил еще одно поле для их получения.

Итак, мне нужно переопределить проверку 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.")

Заранее спасибо.

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
ESIdentityCardNumberField(label='DNI/CIF', required=False)
Другие вопросы по тегам