Сообщения Django отображаются неправильно, но только на одной странице

У меня есть общий CreateView, где пользователи могут отправить проблему о товаре. Когда проблема не была отправлена о товаре, показывается шаблон отправки, когда пользователь отправил проблему, показывается шаблон с историей сообщений для этой проблемы.

class PhotoProblemView(LoginRequiredMixin, CreateView):
    form_class = PhotoProblemMessageForm

    def get_template_names(self):
        if PhotoProblem.objects.filter(photo=self.kwargs.get('pk')).count() <= 0:
            return ['photo/photo_problem_create.html']
        else:
            return ['photo/photo_problem_message.html']

    def get_success_url(self):
        if PhotoProblemMessage.objects.filter(problem__photo_id=self.kwargs.get('pk')).count() <= 1:
            messages.success(self.request, "Your issue has been reported. Please allow 1 business day for a follow up.")
            return reverse('photo_problem', kwargs={'pk': self.kwargs['pk']})
        else:
            return reverse('photo_problem', kwargs={'pk': self.kwargs['pk']})
    
    def get(self, *args, **kwargs):
        if not Photo.objects.filter(id=self.kwargs['pk'],user=self.request.user).exists():
            raise Http404
        return super().get(*args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['photo'] = Photo.objects.get(id=self.kwargs['pk'])
        try:
            context['photo_problem'] = PhotoProblem.objects.get(photo_id=self.kwargs['pk'])
        except PhotoProblem.DoesNotExist:
            pass
        context['messages'] = PhotoProblemMessage.objects.filter(problem__photo_id=self.kwargs.get('pk')).order_by('created')
        return context

    def form_valid(self, form):
        try:
            problem = PhotoProblem.objects.get(photo_id=self.kwargs.get('pk'))
        except:
            problem = PhotoProblem.objects.create(photo_id=self.kwargs.get('pk'))
            problem.save()
        if problem.resolved == True:
            messages.error(self.request, "This issue has been resolved, you can no longer send messages. Please contact us if you need more help.")
            return super(PhotoProblemView, self).form_invalid(form)
        self.object = form.save(commit=False)
        self.object.problem = problem
        self.object.user = self.request.user
        self.object.save()
        return super(PhotoProblemView, self).form_valid(form)

Проблема в том, что когда Django отображает шаблон истории сообщений, он также отображает сообщения, сложенные друг на друга, с UUID всех сообщений. Например: enter image description here

Дополнительно, в шаблоне истории сообщений никогда не отображаются сообщения, которые должны отображаться в методе get_success_url. Он должен отображать такие сообщения, как: enter image description here

Мой вопрос состоит из двух частей - и я подозреваю, что они вызваны одним и тем же:

  1. Why is it rendering messages with all of the objects ID's?
  2. Why is it not rendering my messages from the get_success_url method?

Дополнительная информация, которая может быть полезна:

Модели:

class Photo(models.Model): # table to store each photo

    id = models.UUIDField(default=uuid.uuid4, unique=True, editable=False, primary_key=True)
    photo_file_name = models.CharField(max_length=1000) # what is the photos file name
    photo_file_location = models.FileField(blank=True, null=True)
    mime_type = models.CharField(max_length=50, null=False, blank=False) # what is the mime type of the file uploaded
    status = models.CharField(max_length=1000, null=True, blank=True) #store an error message if photo cannot be cropped (or success if it is)

    def __str__(self):
        return str(self.id)

class PhotoProblem(models.Model): # table that tracks problems reported from a user
    id = models.UUIDField(default=uuid.uuid4, unique=True, editable=False, primary_key=True)
    photo = models.OneToOneField(Photo, on_delete=models.PROTECT) # what photo is this problem about
    resolved = models.BooleanField(default=False) #has this issue been resolved or is it still being looked into
    created = models.DateTimeField(auto_now_add=True) # date time when problem is created

    def __str__(self):
        return str(self.id)

class PhotoProblemMessage(models.Model): # table for all the messages for photo problems
    id = models.UUIDField(default=uuid.uuid4, unique=True, editable=False, primary_key=True)
    problem = models.ForeignKey(PhotoProblem, on_delete=models.PROTECT) # which problem does this message belong to
    message = models.TextField(blank=False, null=False) # what is the message
    user = models.ForeignKey('accounts.CustomUser', on_delete=models.PROTECT) # user that created this message
    admin_message = models.BooleanField(default=False) # is the message one added by an admin team member (staff status)
    created = models.DateTimeField(auto_now_add=True) # date time when problem is created

    def __str__(self):
        return str(self.id)

base.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.tailwindcss.com"></script>
    <link href="{% static 'css/main.css' %}" rel="stylesheet">
    <title>{% block title %}Photos{% endblock title %}</title>
    <link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.png' %}"/>
</head>
<body>
    {% include 'navbar.html' %}
    <div class="flex justify-center">
        {% if messages %}
        {% for message in messages %}
            <div class="absolute z-100 sm:w-5/6 2xl:w-6/12 {{message.tags}} rounded-lg p-4 text-white message-alert" role="alert">
                <span>
                    {{message}}
                </span>
                <span class="close-error float-right">x</span>
            </div>
        {% endfor %}
        {% endif %}
    </div>
    {% block content %}
    {% endblock content %}
    {% include 'footer.html' %}
    <script type="text/javascript" src="{% static 'js/main.js' %}"></script>
</body>
</html>

photo_problem_message.html

Если есть какие-то части кода, которые могут быть полезны, я могу их добавить.

Вернуться на верх