Заполнение объекта Python с помощью Django Form

Я пытаюсь использовать форму Django для заполнения объекта Python (не модели Django). У меня такое ощущение, что я могу только либо:

  • постройте простую форму и заполните ее вручную
  • использовать модель Django в качестве прокси

Дополнительная сложность заключается в том, что форма отправляет GET-запрос

Класс

class Search:
      
    def __init__(self):
        self.min_area = 0
        self.max_area = 999

Форма

from django import forms


class MainSearchForm(forms.Form):

    min_area = forms.IntegerField(label="Minimum", required=False)
    max_area = forms.IntegerField(label="Maximum", required=False)

Вид

from django.http import HttpResponse
from django.template import loader
from front.forms.search.main import MainSearchForm
from front.gears.search import Search


def main(request):

    search = Search()
    form = MainSearchForm(request.GET)

    # manual populating i want to avoid
    if form.is_bound:
        search.min_area = form.cleaned_data['min_area']
        search.max_area = form.cleaned_data['max_area']

    tpl = loader.get_template('front/search/main.html')
    ctx = {
        'form': form
    }

    return HttpResponse(tpl.render(ctx, request))

На данный момент я заполняю вручную в представлении, но я уверен, что есть лучший способ сделать это. Может быть, я упустил какую-то часть документации?

Вы можете использовать setattr:

for key in form.cleaned_data:
    setattr(search, key, form.cleaned_data[key])

Вернуться на верх