如何对重复的表单使用基于类的视图

时间:2016-01-27 04:10:54

标签: python django

我对cbvs不太熟悉,我想知道它是否适用于这个例子。我的django项目中有几个非常相似的视图。他们遵循这种模式:

@login_required
@listing_ownership
def edit_listing_location(request, listing):
    if request.method == "POST":
        form = EditLocationForm(request.POST, instance=listing)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('listings:edit_listing_details', args=listing.id))
    else:
        form = EditLocationForm(instance=listing)
    context = {'form': form, 'user': request.user, 'listing': listing}
    return render(request, 'listing/edit_listing_location.html', context)

在它们之间唯一改变的是模板名称和返回URL。这种模式是CBV可以缩短代码吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

FormView完全做到了。它在GET请求中显示未绑定的表单,在POST或PUT中,它检查表单是否有效,然后发布。成功后,您还可以指定重定向网址。

这是一段代码:

class CreateListing(FormView):
    template_name = 'listing/edit_listing_location.html'
    success_url = 'listing/edit_listing_details'
    form_class = ListingForm

    def form_valid(self, form):
        form.save()