2

所以我是 django 的新手,我正在为基于类的视图的文档而苦苦挣扎。不太确定我在这里做错了什么,但这就是问题所在:

我在表单上填写适当的数据,单击提交,然后我被重定向到相同的 url 以及一些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>
4

2 回答 2

3

你使用的任何理由method="get"?FormView 类可能需要一个 POST 来触发验证和保存。GET 通常只用于呈现初始表单。

于 2012-06-02T10:59:43.557 回答
0

这可能是因为您缺少 CSRF 令牌,但它确实应该给您一个错误。不过,请尝试:

<form action="" method="get">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit"/>
</form>

此外,虽然它没有解释为什么不保存表单,但您需要success_url在您的 上指定 a FormView,用户在成功提交表单后应重定向到的 URL。实际上,我从未尝试过将其关闭,但视图可能会将您带回表单,仅仅是因为它不知道该去哪里。

于 2012-06-01T21:26:10.313 回答