django - 在 generic.DetailView 中访问模型实例

标签 django django-views

在渲染模板之前,有没有办法访问将在 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/

相关文章:

django - 如何在 Django 中为登录用户显示不同的 View ?

python - 如何在 Django 中显示自定义 404.html 页面

python - 如何使用 forms.ModelForm 保存个人简介

python - 如何统计与ListView中显示的项目相关的对象?

html - 发布匹配查询不存在

python - 如何在 Django 中改进这个 "register" View ?

python - 基于类的 View 和 'raise NotImplementedError'

django - 怎么: django_manage in ansible with Python3

django - 如何通过 uwsgi 强制应用程序的标准输出日志?

ajax - 使用 Django 通过 Ajax 调用返回更新的 session 变量(在页面加载时)