gpt4 book ai didi

django - 在 django 中保存之前更改 CreateView 行为以预览数据

转载 作者:行者123 更新时间:2023-12-04 12:27:02 24 4
gpt4 key购买 nike

我得到了Creatview()基于类的函数来工作。提交成功时,已经有数据,显示成功页面。

我想这样改变这种行为:当 CreateView() 成功时,我希望数据得到验证,但不保存。我不想转到成功页面,而是想使用 DetailView()类来显示新创建的实例,因此用户可以看到最终保存数据时的样子。

一旦用户对显示的数据感到满意,用户可以单击“保存”,在这种情况下,数据被保存并且 CreateView() 完成,或者用户可以单击“重新编辑”,然后返回到表单来更改数据,然后使用 DetailView() 显示新创建的实例(并重复直到用户满意为止)。使用基于类的 View 优雅地执行此操作的最佳方法是什么?

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)

此外,我知道表单向导,但我没有多页表单。即使我忽略了这一点,表单向导也不提供在最终保存之前预览数据的机会。

编辑:关于 google groups 的相关讨论, 但没有解决方案

最佳答案

这是我应该做的:

覆盖 RestaurantCreate 类的 form_valid 方法,并让表单在 session 中保存。从那里您可以重定向到另一个 View ,您的 RestaurentDetail View ,在那里您可以通过从 session 中读出表单并显示您需要的内容来覆盖 get_object 方法。在那里我还会放置一个隐藏所有字段的表单,除了提交/保存按钮。该表格将由您 session 中的任何内容填充。因此,当用户按下保存时,将对另一个 View RestaurantFinalCreate View 执行 POST 操作。在那里,您可以像往常一样实现 CreateView。

如果您不确定要覆盖哪个方法以及如何覆盖,请查看:http://ccbv.co.uk/这对我很有帮助。

也不要在 RestaurantCreate View 的 form_valid 方法中使用 super,因为这会触发父类 ModelFormMixin 中的保存。

关于django - 在 django 中保存之前更改 CreateView 行为以预览数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com