使用 Django 表单填充 Python 对象

Populate Python object with Django Form

我正在尝试使用 Django 表单来填充 Python 对象(不是 Django 模型)。 我感觉我只能做一个:

额外的困难是表单发送GET请求

class

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.has_changed() and form.is_valid():
        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,
        'search': search
    }

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

现在,我在视图中手动填充,但我很确定有更好的方法来完成它。 我是否遗漏了部分文档?

您可以使用 setattr:

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