Как сделать 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