【问题标题】:Success-message not working in Django Class based Createview成功消息在基于 Django 类的 Createview 中不起作用
【发布时间】:2019-12-14 16:54:08
【问题描述】:

我在下面有我的视图我尝试了所有方法,但成功消息在基于 Django 类的 Createview 中不起作用。我哪里错了?

编辑我添加了 SuccessMessageMixin 但仍然无法正常工作。

class TaskCraeteView(SuccessMessageMixin,LoginRequiredMixin,CreateView):

    model=Task
    success_message = "Task Craeted successfully!"
    success_url = reverse_lazy('create-task')
    login_url = 'login'
    template_name = 'create-task'
    form_class = TaskCreateForm
    get_success_url ="/"

    def form_valid(self,form):
        print(form.cleaned_data)
        form.instance.task_assign_by = self.request.user
        server = form.save(False)
        server.save()
        # form.save()
        task= Task.objects.latest('id')
        print(type(task))


        for users in form.cleaned_data['task_assign_to']:
            TaskComplete.objects.create(completed_by=users, task_id= task)

        for p in form.cleaned_data['task_perticulars']:
            task.task_perticulars.add(p)
        for t in form.cleaned_data['task_subtask_name']:
            task.task_subtask_name.add(t)

        return HttpResponseRedirect("add")

我的模板:-

{% if messages %}
                    {% for message in messages %}
                     <div class="alert alert-{{message.tags}}">
                        <a href="#" class="close" data-dismiss="alert" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                        </a>

                             {{ message }} 
                     </div>

                        {%endif%}

                    {% endfor %}
                    {% endif %}

使用 HttpResponseRedirect 时如何发送成功消息?

【问题讨论】:

  • 我也面临同样的问题

标签: django django-templates django-views


【解决方案1】:

为了使用success_message 属性,您的视图还应该扩展SuccessMessageMixin。除此之外,您还需要设置您的success_url。您可以从official docs 找到更多详细信息。您需要更新您的视图,例如:

class TaskCraeteView(SuccessMessageMixin, LoginRequiredMixin, CreateView):

    model=Task
    success_url = '/success/'
    success_message = "Task Craeted successfully!"
    login_url = 'login'
    template_name = 'create-task'
    form_class = TaskCreateForm

    def form_valid(self,form):
        print(form.cleaned_data)
        form.instance.task_assign_by = self.request.user
        server = form.save(False)
        server.save()
        # form.save()
        task= Task.objects.latest('id')
        print(type(task))


        for users in form.cleaned_data['task_assign_to']:
            TaskComplete.objects.create(completed_by=users, task_id= task)

        for p in form.cleaned_data['task_perticulars']:
            task.task_perticulars.add(p)
        for t in form.cleaned_data['task_subtask_name']:
            task.task_subtask_name.add(t)

        return HttpResponseRedirect("add")

【讨论】:

  • 我添加了 success_url = reverse_lazy('create-task') 但还是不行!!
  • 查看我编辑的答案,我已删除 get_success_url 属性。
【解决方案2】:

为TaskCraeteView类继承SuccessMessageMixin,如下所示:

class TaskCraeteView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
....

如果仍然无效,请尝试更改参数的顺序,即在 LoginRequiredMixin 和 SuccessMessageMixin 之间交换。

【讨论】:

  • 尝试删除LoginRequiredMixin,只是为了检查。
猜你喜欢
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多