Django-Форма: проблема с добавлением дополнительной информации в форму при ее очистке

#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