Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中将变量从save方法传递到视图?_Python_Django - Fatal编程技术网

Python 如何在Django中将变量从save方法传递到视图?

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() 但这不允许我在保存模型后查看一些变量。我明白,将

若表单成功保存在数据库中,我需要显示带有信息的消息。由于我的网站中有许多不同的表单,所以我想编写自定义的save方法,并在每次调用save方法时传递变量以查看

我尝试在保存时使用global创建全局变量,然后在视图中捕获它并传递到模板

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()不进行任何渲染,因此无法将任何值传递给模板。