在渲染模板之前,有没有办法访问将在 views.py 中的 generic.DetailView 中显示的模型实例?类似于这里的假设函数:
class MyModelDetailView(LoginRequiredMixin, generic.DetailView):
model = MyModel
template_name_suffix = '_details'
def do_some_initial_stuff(model_instance):
# do stuff to model_instace,
# like assigning fields, creating context variables based on existing fields, etc.
最终,我希望用户单击一个模板中特定模型实例的按钮,然后定向到这个 generic.DetailView 模板,在该模板中,模型显示其某些字段值已更改和其他一些内容(例如模型可能有一个字段,用于确认此用户单击了上一个模板中的按钮)。对最有效的方法的建议将不胜感激。谢谢 :)
最佳答案
如果您只想在前一个 View 中单击按钮时进行某些更改,那么您可以使用 Django session .将所需的值添加到 session 字典中。
request.session['button_clicked'] = True
要在当前 View 上下文中进行更改,可以通过覆盖 get_context_data() 来完成。
喜欢:
class MyModelDetailView(LoginRequiredMixin, generic.DetailView):
model = MyModel
template_name_suffix = '_details'
def get_context_data(self):
context = super(MyModelDetailView, self).get_context_data()
# Object is accessible through self.object or self.get_object()
if request.session.pop('button_clicked', False):
myobject = self.object
# The alteration you make on myobject wont be saved until you save it using myobject.save()
# Alter the object using myobject and alter the context varible like this:
context['object'] = myobject
context['myvar'] = "My Variable"
# Then return
return context
更多关于 Django Sessions:https://docs.djangoproject.com/en/1.11/topics/http/sessions/
关于django - 在 generic.DetailView 中访问模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46376733/