Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django 1.10中从表单获取值并重定向到/value_Python_Django_Django 1.10 - Fatal编程技术网

Python 如何在Django 1.10中从表单获取值并重定向到/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

我需要从标记中获取值,并通过提交重定向到“/value/”

现在我得到:

'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)
。在这种情况下,谢谢大家!