【问题标题】: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 %}