Сообщения 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 всех сообщений. Например:

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

Мой вопрос состоит из двух частей - и я подозреваю, что они вызваны одним и тем же:
- Why is it rendering messages with all of the objects ID's?
- Why is it not rendering my messages from the
get_success_urlmethod?
Дополнительная информация, которая может быть полезна:
Модели:
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
Если есть какие-то части кода, которые могут быть полезны, я могу их добавить.