有没有办法结合CreateView和UpdateView?
Is there any way to combine CreateView and UpdateView?
如果模型中不存在项目,我想显示 CreateView
中存在的表单。否则我需要显示 UpdateView
中存在的表单。这样它就会加载已经保存的值。稍后我应该通过调用 update_or_create
方法将数据保存到数据库。
这可能吗?
不要弄乱双重用途的视图,要找出哪个以及何时 运行 正确的方法(不推荐)并不容易,添加第三个视图将重定向到 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")
@AviahLaor 提到的另一个 "double purpose" 视图解决方案是将 CreateView
和 UpdateView
合并到一个视图中。在我看来,它是DRYer。给出的解决方案here很好
如果模型中不存在项目,我想显示 CreateView
中存在的表单。否则我需要显示 UpdateView
中存在的表单。这样它就会加载已经保存的值。稍后我应该通过调用 update_or_create
方法将数据保存到数据库。
这可能吗?
不要弄乱双重用途的视图,要找出哪个以及何时 运行 正确的方法(不推荐)并不容易,添加第三个视图将重定向到 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")
@AviahLaor 提到的另一个 "double purpose" 视图解决方案是将 CreateView
和 UpdateView
合并到一个视图中。在我看来,它是DRYer。给出的解决方案here很好