如何仅使用POST(而不是GET)设置CreateView视图的初始表单值?

时间:2016-09-02 15:59:56

标签: python django django-views

用户单击一个按钮,通过POST请求将其转到新表单,该请求包含一个pk。这用于使用一些额外数据预填充新表单。此时没有数据保存到数据库。我不想在URL上传递此pk,因此无法使用GET调用视图。

我尝试在CreateView中覆盖get_initial()方法,但这似乎只是在GET请求后调用。

我也试过def post(),这让我可以轻松访问这些字段,但这意味着我必须编写更多代码来处理表单验证等(由vanilla CreateView自动处理)。

那么,当两个请求都通过POST发送时,处理表单呈现和保存的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我要做什么:

def post(self, request, **kwargs):
    # Replace 'list_of_pets' with stuff that you'll definitely have in the first request
    if 'list_of_pets' in request.POST:
        # Provide initial data for form in get()
        return self.get(request, **kwargs)
    else:
        # Provides automatic form validation
        return super().post(request, **kwargs)

get()方法中,您可以设置初始数据和诸如此类的东西。你也可以使用一个完全独立的方法,但是覆盖get()会给你的好处是,如果有人在没有POST请求的情况下徘徊到URL,他们就不会马上得到一个令人讨厌的405(当然还有其他方法可以避免它,只是说')。