Python 如何在Django中将变量从save方法传递到视图?
若表单成功保存在数据库中,我需要显示带有信息的消息。由于我的网站中有许多不同的表单,所以我想编写自定义的save方法,并在每次调用save方法时传递变量以查看 我尝试在保存时使用global创建全局变量,然后在视图中捕获它并传递到模板Python 如何在Django中将变量从save方法传递到视图?,python,django,Python,Django,若表单成功保存在数据库中,我需要显示带有信息的消息。由于我的网站中有许多不同的表单,所以我想编写自定义的save方法,并在每次调用save方法时传递变量以查看 我尝试在保存时使用global创建全局变量,然后在视图中捕获它并传递到模板 def save(self, *args, **kwargs): global some_var some_var = True super(ModelName, self).save() 但这不允许我在保存模型后查看一些变量。我明白,将
def save(self, *args, **kwargs):
global some_var
some_var = True
super(ModelName, self).save()
但这不允许我在保存模型后查看一些变量。我明白,将变量全球化不是最佳做法,但我无法找到更好的办法
更新:
views.py
from .forms import modForm
def func(request, passed_id):
mod_obj = ModelName.objects.get(pk=passed_id)
if request.method == 'POST':
mod_form = modForm(request.POST, instance = mod_obj)
mod_form.save()
return render(request, 'template.html')
我需要在表单保存时将变量传递给模板。但是因为我有很多表单,所以在视图中写这篇文章并不枯燥。这就是为什么我想在custom save()中执行此操作的原因。执行此操作的最佳方法是在视图中;毕竟,正是视图在保存对象,所以它应该知道它已经这样做了 但是,如果确实希望在save方法中执行此操作,可以尝试将一个额外属性附加到模型对象:
def save(self, *args, **kwargs):
self.is_saved = True
return super(ModelName, self).save(*args, **kwargs)
现在假设对象是要传递给模板的对象,只需在那里检查
{%if obj.is_saved%}
;毕竟,正是视图在保存对象,所以它应该知道它已经这样做了
但是,如果确实希望在save方法中执行此操作,可以尝试将一个额外属性附加到模型对象:
def save(self, *args, **kwargs):
self.is_saved = True
return super(ModelName, self).save(*args, **kwargs)
现在假设该对象是您要传递给模板的对象,您只需在那里检查
{%if obj.is_saved%}
。您可以添加视图代码吗?这不仅仅是“非最佳实践”,在Django这样的环境中是非常危险的。不要这样做。但是,为了让我们正确回答,您需要显示更多关于您实际尝试执行的操作的信息。我可以这样做:有10个表单视图,并向每个Is Not DRY添加代码。@Daniel Roseman当表单成功保存到数据库中时,我需要在页面上显示确认消息。我不想在视图中这样做我有大约10个视图要更改,这就是为什么我试图通过编写自定义保存来实现它。每次保存实例时,我都试图将变量传递给view->template。我认为您误解了django视图和表单。form.save()不进行任何渲染,因此无法将任何值传递给模板。您可以添加视图代码吗?这不仅仅是“非最佳做法”,在Django这样的环境中,它是非常危险的。不要这样做。但是,为了让我们正确回答,您需要显示更多关于您实际尝试执行的操作的信息。我可以这样做:有10个表单视图,并向每个Is Not DRY添加代码。@Daniel Roseman当表单成功保存到数据库中时,我需要在页面上显示确认消息。我不想在视图中这样做我有大约10个视图要更改,这就是为什么我试图通过编写自定义保存来实现它。每次保存实例时,我都试图将变量传递给view->template。我认为您误解了django视图和表单。form.save()不进行任何渲染,因此无法将任何值传递给模板。