Created a notification feature in my django project. I’ve got all the functionality down and it works except for one thing. I want the template to display a different message depending on what action is committed. It only displays ‘The ticket has been updated’ no matter what action is taken instead of displaying the correct message How do I fix this?
Here is what i have so far.
template
<div class="dropdown-content" id="myDropdown">
{% if notifications %}
{% for notification in notifications %}
{% if notification.notification_type == 'created' %}
<a href="#">{{notification.ticket.name}}: A new ticket has been assigned to you.</a>
{% else %}
<a href="#">{{notification.ticket.name}}: The ticket has been updated.</a>
{% endif %}
{% endfor %}
{% else %}
<a href="#">No new notifications</a>
{% endif %}
</div>
models.py for notification
class Notification(models.Model):
OPTIONS = (
('created', 'created'),
('updated', 'updated'),
)
recipient = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True, related_name='notifications')
ticket = models.ForeignKey(Ticket, on_delete=models.SET_NULL, null=True, related_name='notifications')
message = models.TextField()
notification_type = models.CharField(choices=OPTIONS, max_length=15, null=True)
is_read = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
signals.py for notification
@receiver(post_save, sender=Ticket)
def create_notification(sender, instance, created, **kwargs):
if created:
notification_type = 'created'
else:
notification_type = 'updated'
assignees = instance.assignee.all()
for assignee in assignees:
Notification.objects.create(recipient=assignee, notification_type=notification_type)
this is createTicket function inside the views.py
@login_required
def createTicket(request):
form = TicketForm()
categories = Category.objects.all()
users = CustomUser.objects.all()
if request.method == 'POST':
category_name = request.POST.get('category')
category, created = Category.objects.get_or_create(name=category_name)
# Retrieve the project object that the ticket should be connected with
project_id = request.POST.get('project')
project = Project.objects.get(id=project_id)
# Retrieve the list of selected users from the form
assignee_ids = request.POST.getlist('assignee')
assignee = CustomUser.objects.filter(id__in=assignee_ids)
ticket = Ticket.objects.create(
host = request.user,
category=category,
project=project,
name=request.POST.get('name'),
status=request.POST.get('status'),
priority=request.POST.get('priority'),
type=request.POST.get('type'),
description=request.POST.get('description'),
)
# Add the selected users to the ticket
ticket.assignee.set(assignee)
ticket.save()
return redirect('ticket', pk=ticket.id)
context = {'form': form, 'categories': categories, 'users': users}
return render(request, 'tickets/ticket_form.html', context)