有没有办法组合CreateView和UpdateView?

时间:2016-02-23 12:10:20

标签: python django django-forms

如果模型中没有项目,我想显示CreateView中的表单。否则,我需要在UpdateView中显示该表单。这样它就会加载已保存的值。稍后我应该通过调用update_or_create方法将数据保存到db。

这可能吗?

2 个答案:

答案 0 :(得分:6)

添加第三个将重定向到CreateView或EditView的视图,而不是弄乱双目的视图,这对于找出哪个以及何时运行正确的方法(并且不推荐)并不容易。

看起来应该是这样的:

from django.core.urlresolvers import reverse

class AddItemView(generic.CreateView):
    ...

class EditItemView(generic.EditView):
    ...

class UpdateItemRedirectView(generic.RedirectView):

   def get_redirect_url(self):

         if Item.objects.get( ...criteria... ).exists():
              return reverse("url_name_of_edit_view")
         else:
              return reverse("url_name_of_add_view")

答案 1 :(得分:0)

@AviahLaor 提及的另一个“双重目的”视图解决方案是在一个视图中合并CreateViewUpdateView。在我看来,这是DRYer。解决方案非常好here