python - 如何从表单获取值并重定向到 Django 1.10 中的/value

标签 python django django-1.10

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

现在我得到:

'ApartmentForm' object has no attribute 'cleaned_data'

我完全错过了一些东西。

表单.py

class ApartmentForm(ModelForm):
    class Meta:
        model = Apartment
        fields = ['title']

View .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实在是太失败了。我修复了这个问题,但它仍然将 None 传递给 url ( http://127.0.0.1:8000/None )。不明白为什么。

查看.py

def index(request):
    context = {}
    context['apartments'] = get_list_or_404(Apartment)
    if request.method == 'POST':
        form = ApartmentForm(request.POST or None)
        if form.is_valid():
            id = form.cleaned_data.get('id', None)
            return redirect(id)
    else:
        context['apartment_form'] = ApartmentForm
        return render(request, 'main/main.html', context)

表单.py

APARTMENTS = ()
for apartment in Apartment.objects.all():
    APARTMENTS += ((apartment.id, apartment.title),)

class ApartmentForm(Form):
    apartment = ChoiceField(label='', widget=Select, choices=APARTMENTS)

模板

<form action="." method="post">
    {% csrf_token %}
    {{ apartment_form }}
<input type="submit" value="Chose">

最佳答案

form.cleaned_data 来自 form.is_valid(),因此您应该像这样更改您的 views.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)

关于python - 如何从表单获取值并重定向到 Django 1.10 中的/value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42467535/

相关文章:

python - 如何在 Django 表单中添加 GenericRelation 字段

python - 在另一个数据框中查找列名

python - 使用 print() 时如何换行和缩进长行?

python - 当前的 URL,app/,与这些中的任何一个都不匹配

python - 通过 Django 的 MySQL REGEXP 查询不会返回任何内容,但 MySQL 中的查询工作得很好,有什么想法吗?

django - 我的 Django 站点的主页应该是一个应用程序吗?

python - 用有序相关模型的第一个值注释 QuerySet

python - 与 Python 子进程的混淆

python - 我可以对 scipy cumtrapz 使用集成限制吗?

python - Django 中的实时搜索