我对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可以缩短代码吗?
谢谢!
答案 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()