Subham
Subham

Reputation: 701

Success-message not working in Django Class based Createview

I have my View Below I tried everything but Success-message not working in Django Class-based Createview. Where I am wrong?

Edit I added SuccessMessageMixin But still not working.

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")

My template:-

{% 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 %}

How to send a success message when I use HttpResponseRedirect?

Upvotes: 1

Views: 733

Answers (2)

cagrias
cagrias

Reputation: 1847

In order to use the success_message attribute, your view should also extend SuccessMessageMixin. In addition to that, you need to set your success_url. You can find more details from official docs. You need to update your view such as:

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")

Upvotes: 1

Shaheer Raza
Shaheer Raza

Reputation: 49

Inherit SuccessMessageMixin for class TaskCraeteView as shown below:

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

If still not works, try to change ordering of arguments, i.e swap between LoginRequiredMixin and SuccessMessageMixin.

Upvotes: 0

Related Questions