我正在使用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)
核心问题是你return form
。您不能通过视图函数返回表单,它必须是HttpResponse
对象。
话虽如此,您的代码包含一些有些“有问题”的项目:
Form
命名表单,因为否则可以使用名为Answer
的模型生成“名称冲突”]]Answer
的引用传递给上下文,而不是表单对象。如果发现表格无效,这很有用;is_valid()
method [Django-doc],而不是获取方法引用,因为它始终具有真实性is_valid()
;True
;更好的视图如下:
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})