#django #django-models #django-forms #django-validation
#django #django-модели #django-forms #django-проверка
Вопрос:
У меня есть форма Django, которая просто принимает почтовый индекс.
class ServiceAreaForm(forms.Form):
name = forms.CharField(disabled=True, required=False)
zip = forms.IntegerField(
label="PLZ", validators=[validateZipCodeLength]
)
def clean(self):
service_area: ServiceArea = validateServiceArea(self["zip"].value())
self.fields["name"].value = service_area.name
super().clean()
В validateServiceArea я хотел бы проверить, поддерживается ли почтовый индекс.
def validateServiceArea(zip_code):
try:
return ServiceArea.objects.get(zip=zip_code)
except ServiceArea.DoesNotExist:
raise ValidationError("Not supported Service Area")
Если это так, я хотел бы передать информацию из моей возвращенной области обслуживания в другую форму, вместо того, чтобы использовать другой запрос для того же самого.
Я пытался использовать метод clean формы и поместить его в поле name, но это кажется слишком сложным (и name даже не будет отображаться в cleaned_fields).
Есть ли какой-нибудь простой способ сделать это?
Ответ №1:
я бы сделал это так:
def clean(self):
cleaned_data = super.clean()
service_area: ServiceArea = validateServiceArea(cleaned_data.get("zip"))
cleaned_data["name"] = service_area.name
return cleaned_data