我已经得到了基于Creatview()类的函数.提交成功后,它已经有数据并显示"成功"页面.
我想以这种方式改变这种行为:当CreateView()成功时,我希望数据得到验证,但不能保存.我不想进入成功页面,而是想使用DetailView()类来显示新创建的实例,这样用户就可以看到最终保存数据时的样子.
一旦用户对显示的数据感到满意,用户可以单击"保存",在这种情况下保存数据并完成CreateView()或用户可以单击"重新编辑",然后返回到表单进行更改数据然后使用DetailView()显示新创建的实例(并重复直到用户满意为止).使用基于类的视图优雅地执行此操作的最佳方法是什么?
from django.views.generic.edit import CreateView
from restaurant.models import Restaurant
from restaurant.forms import RestaurantForm
import uuid
class RestaurantCreate(CreateView):
form_class = RestaurantForm
template_name = 'restaurant_form.html'
model = Restaurant
def form_valid(self, form):
form.instance.created_by = self.request.user
form.instance.life_id = str(uuid.uuid1())
return super(RestaurantCreate, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)
另外,我知道表单向导,但我没有多页表单.即使我忽略了这一点,表单向导也没有机会在最终保存之前预览数据.
编辑:关于谷歌群组的相关讨论,但没有解决方案
这是我应该做的:
覆盖RestaurantCreate类的form_valid方法,并将表单保存在会话中.从那里你可以重定向到另一个视图,你的RestaurentDetail视图,在那里你将通过从会话中读出表格并显示你需要的内容来覆盖get_object方法.在那里我还会放置一个隐藏所有字段的表单,除了提交/保存按钮.表单将由您会话中的任何内容填充.因此,当用户按下保存时,例如,对另一个视图的RestaurantFinalCreate视图执行POST.在那里你可以正常实现CreateView.
如果您不确定要覆盖哪种方法以及如何覆盖,请查看:http://ccbv.co.uk/它对我非常有帮助.
也不要在RestaurantCreate视图的form_valid方法中使用super,因为这会触发父类ModelFormMixin中的保存.
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |