所以我是django的新手,我正在努力使用基于类的视图的文档。不确定我在这里做错了什么,但这就是问题所在:
我在表单上填写适当的数据,点击提交,然后我被重定向到相同的网址以及与我在表单中提交的内容相对应的一些get
参数。数据库中没有添加任何新内容。我想点击提交时在数据库中创建一个新的Advertisement
行。
我有一个ModelForm如下:
class NewAdForm(ModelForm):
class Meta:
model = Advertisement
exclude = ('campaign',)
def __init__(self, campaign, *args, **kwargs):
super(NewAdForm, self).__init__(*args, **kwargs)
self.campaign = campaign
我还有一个FormView:
class AddAdvertView(FormView):
form_class = NewAdForm
template_name = 'advertisers/newad.html'
def get_form_kwargs(self):this
kwargs = super(AddAdvertView, self).get_form_kwargs()
kwargs['campaign'] = get_object_or_404(Campaign, id__exact = self.kwargs['campaign_id'])
return kwargs
def form_valid(self, form):
form.save(commit = True)
return super(AddAdvertView, self).form_valid(form)
这是模板:
<form action="" method="get">
{{ form.as_p }}
<input type="submit" value="Submit"/>
</form>
答案 0 :(得分:3)
您使用method="get"
的原因是什么? FormView类可能需要POST才能触发验证和保存。 GET通常只用于渲染初始形式。
答案 1 :(得分:0)
这可能是因为你错过了CSRF令牌,但它真的应该给你一个错误。不过,试试:
<form action="" method="get">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit"/>
</form>
此外,虽然它没有解释为什么表单未保存,但您需要在success_url
上指定FormView
,用户在成功提交表单后应重定向到的网址。我实际上从来没有尝试过它,但是视图可能会让你回到表单只是因为它不知道还能去哪里。