Python 如何在Django 1.10中从表单获取值并重定向到/value
我需要从标记中获取值,并通过提交重定向到“/value/” 现在我得到:Python 如何在Django 1.10中从表单获取值并重定向到/value,python,django,django-1.10,Python,Django,Django 1.10,我需要从标记中获取值,并通过提交重定向到“/value/” 现在我得到: 'ApartmentForm' object has no attribute 'cleaned_data' 我完全错过了一些东西 forms.py class ApartmentForm(ModelForm): class Meta: model = Apartment fields = ['title'] APARTMENTS = () for apartment in Ap
'ApartmentForm' object has no attribute 'cleaned_data'
我完全错过了一些东西
forms.py
class ApartmentForm(ModelForm):
class Meta:
model = Apartment
fields = ['title']
APARTMENTS = ()
for apartment in Apartment.objects.all():
APARTMENTS += ((apartment.id, apartment.title),)
class ApartmentForm(Form):
apartment = ChoiceField(label='', widget=Select, choices=APARTMENTS)
views.py
def index(request):
context = {}
context['apartments'] = get_list_or_404(Apartment)
if request.method == 'POST':
form = ApartmentForm(request.POST or None)
context = {'form': form,}
id = form.cleaned_data.get('id', None)
return redirect(id)
else:
context['apartment_form'] = ApartmentForm
return render(request, 'main/main.html', context)
模板
<form action="/{{ apartment.id }}" method="post">
{% csrf_token %}
<p><select size="10">
<option disabled>Chose apartment</option>
{% for apartment in apartments %}
<option value="{{ apartment.id }}">{{ apartment.title }}</option>
{% endfor %}
</select></p>
<input type="submit" value="Chose">
</form>
<form action="." method="post">
{% csrf_token %}
{{ apartment_form }}
<input type="submit" value="Chose">
forms.py
class ApartmentForm(ModelForm):
class Meta:
model = Apartment
fields = ['title']
APARTMENTS = ()
for apartment in Apartment.objects.all():
APARTMENTS += ((apartment.id, apartment.title),)
class ApartmentForm(Form):
apartment = ChoiceField(label='', widget=Select, choices=APARTMENTS)
模板
<form action="/{{ apartment.id }}" method="post">
{% csrf_token %}
<p><select size="10">
<option disabled>Chose apartment</option>
{% for apartment in apartments %}
<option value="{{ apartment.id }}">{{ apartment.title }}</option>
{% endfor %}
</select></p>
<input type="submit" value="Chose">
</form>
<form action="." method="post">
{% csrf_token %}
{{ apartment_form }}
<input type="submit" value="Chose">
{%csrf_令牌%}
{{公寓形式}
表单。已清理的\u数据来自表单。是否有效()
,因此您应该像这样更改视图.py
:
def index(request):
[...]
if request.method == 'POST':
form = ApartmentForm(request.POST or None)
if form.is_valid():
[...]
id = form.cleaned_data.get('id', None)
return redirect(id)
您需要先检查表单。是否有效()
,然后才能访问已清理的数据。注意,表单操作值没有意义;此时您没有公寓id的值。幸运的是,这只会使操作变为空,因此它会提交到索引视图,这正是您想要的。@DanielRoseman谢谢,将其更改为action=“.”
,并添加了form.is\u valid()
,但现在我得到的是ValueError,它返回了None。。。回溯在李的答案下面。那么,如果表格无效,你将返回什么?实际上,表单视图的模式是在中给出的,没有任何理由做其他事情。现在我得到:Traceback(最近一次调用):File“/Users/leonidivanov/develope/A3/Standart/venv/lib/python3.5/site packages/django/core/handlers/exception.py”,第39行,在内部响应=get_响应(请求)文件中“/Users/leonidivanov/develope/A3/Standart/venv/lib/python3.5/site packages/django/core/handlers/base.py”,第198行,在“获取”响应中“返回了无”。%(回调。\模块\视图\名称)ValueError:view main.views.index没有返回HttpResponse对象。相反,它没有返回任何对象。
Django的view
应该返回HttpRespone对象。但是,如果您得到None
,它将来自id=form.cleaned\u data.get('id',None)
。这意味着您没有从表单中获取id
命名输入值。是的,问题是它必须是id=form.cleaned\u data.get('plant',None)
。在这种情况下,谢谢大家!