错误:“答案”对象没有属性“获取”?

问题描述 投票:1回答:1

我正在使用Django 1.11。当我使用此代码时,它可以与我一起使用,但是当我尝试添加新条件(在这种情况下,否则)时,出现此错误:image我想设置一个新条件以阻止任何人可以在我的页面上放置(获取方法),怎么可以?

favourite.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Favourite Page</title>
    <style>
        input {padding: 8px;margin-top: 5px}
        label {display: inline-block}
        .input {display: inline-block}

    </style>
</head>
<body>

    {% if form_data %}
        {{ form_data.question }}

    {% else %}
    <form action="{% url 'market:favourite' %}" method="post">
        {% csrf_token %}
        {% include 'market/template-form.html' %}
        <input type="submit">
    </form>
    {% endif %}



</body>
</html>

views.py

def favourite(request):
    context = {}
    form = Answer
    context['form'] = form
    if request.method == 'POST':
        form = form(request.POST)
        if form.is_valid:
            form.save(commit=False)
            return render(request, 'market/favourite.html', {'form_data': form.cleaned_data})
    else:
        form = Answer()
        return form
    return render(request, 'market/favourite.html', {'form': form})<br>

forms.py

from .models import Question
from django import forms


class Answer(forms.ModelForm):
    class Meta:
        model = Question
        fields = ['question']

models.py

CHOICE = [(1, 'Si'), (2, 'No')]

class Question(models.Model):
    question = models.IntegerField(choices=CHOICE, default=1, blank=False)
django modelform
1个回答
0
投票

核心问题是你return form。您不能通过视图函数返回表单,它必须是HttpResponse对象。

话虽如此,您的代码包含一些有些“有问题”的项目:

  1. 最好用后缀Form命名表单,因为否则可以使用名为Answer的模型生成“名称冲突”]]
  2. 您将对Answer的引用传递给上下文,而不是表单对象。如果发现表格无效,这很有用;
  3. 为了检查表格是否有效,您需要调用
  4. is_valid() method [Django-doc],而不是获取方法引用,因为它始终具有真实性is_valid();
  5. 如果表单有效,您可能想提交
  6. 结果,因为否则您的表单就没有太多用处;
  7. 如果POST请求有效,通常返回一个redirect
  8. 以实现True;
  9. 您对上下文不做任何事情,因为您只需要构造一个字典并将其作为上下文进行渲染。
  10. 更好的视图如下:

Post/Redirect/Get pattern [wiki]

在这里,您需要用视图名称替换from django.shortcuts import redirect def favourite(request): if request.method == 'POST': # rename Answer to AnswerForm form = AnswerForm(request.POST) if form.is_valid(): # call the method form.save() return redirect('some-view-name') else: form = Answer() return render(request, 'market/favourite.html', {'form': form})

,以在成功视图的情况下重定向到该视图。
© www.soinside.com 2019 - 2024. All rights reserved.