使用 Django 表单填充 Python 对象
Populate Python object with Django Form
我正在尝试使用 Django 表单来填充 Python 对象(不是 Django 模型)。
我感觉我只能做一个:
- 构建一个简单的表单并手动填充
- 使用 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])
我正在尝试使用 Django 表单来填充 Python 对象(不是 Django 模型)。 我感觉我只能做一个:
- 构建一个简单的表单并手动填充
- 使用 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])