【问题标题】:Django: How to return with context from UpdateView (CBV)?Django:如何从UpdateView(CBV)返回上下文?
【发布时间】:2018-04-04 05:57:21
【问题描述】:

以下视图按预期工作

class BrandEditView(PermissionRequiredMixin ,generic.UpdateView):
    permission_required = 'change_brand'

    template_name = 'brand_update_form.pug'
    model = Brand
    fields = ['name']

    def get_object(self, queryset=None):
        print(self.request.user)
        self.object = Brand.objects.get(id=self.kwargs['pk'])
        obj = Brand.objects.get(id=self.kwargs['pk'])
        return obj

表单提交后,我如何返回到相同的视图(具有相同的对象),但有上下文,如消息:“品牌编辑成功”/“你不能这样做”?我找到了一种重定向到同一个视图的方法,但没有上下文。

【问题讨论】:

    标签: django django-views django-class-based-views django-generic-views


    【解决方案1】:

    要在基于类的视图中使用消息框架,我们使用 SuccessMessageMixin

    所以更新你的视图是这样的:

    from django.contrib.messages.views import SuccessMessageMixin
    class BrandEditView(SuccessMessageMixin, PermissionRequiredMixin ,generic.UpdateView):
        permission_required = 'change_brand'
        success_url = reverse_lazy('your redirect url')
        template_name = 'brand_update_form.pug'
        model = Brand
        fields = ['name']
        success_message = "created successfully!"
        def get_object(self, queryset=None):
            print(self.request.user)
            self.object = Brand.objects.get(id=self.kwargs['pk'])
            obj = Brand.objects.get(id=self.kwargs['pk'])
            return obj
    

    并在基本模板或任何模板中添加:

    {% if messages %}
        <ul class="messages">
            {% for message in messages %}
                <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
            {{ message }}
                </li>
            {% endfor %}
        </ul>
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-13
      • 2022-01-22
      • 1970-01-01
      • 2019-06-21
      • 2023-04-04
      • 2020-05-30
      • 2017-02-14
      • 2013-03-10
      相关资源
      最近更新 更多