Django отображает каждую модель, принадлежащую пользователю

У меня есть HTML файл шаблона и в этом файле находится сам билет (модель Ticket) и мне нужно отобразить сообщения, которые принадлежат каждому билету (модель TicketMessages).

Как я могу сделать следующее: -показать мне все TicketMessages (сообщения), которые принадлежат данному конкретному билету. Мне нужно получить текущий билет, а затем отобразить все пользовательские сообщения этого билета?

Файл моделей

class Ticket(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        default=None,
        null=True,
        on_delete=models.CASCADE,
    )
    title = models.CharField(max_length=200)
    description = models.TextField()
    ......

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


class TicketMessages(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        default=None,
        null=True,
        on_delete=models.CASCADE,
    )
    ticket = models.ForeignKey(
        Ticket,
        default=None,
        null=True,
        on_delete=models.CASCADE,
    )
    admin_message = models.CharField(max_length=200, blank=True)
    user_message = models.CharField(max_length=200, blank=True)

Файл представлений уже дает мне ID текущего билета

def ticket_system_view(request, id):
    obj = Ticket.objects.get(id=id)

    if request.method == 'POST':
        user_form = TicketMessagesForm(
            request.POST, instance=TicketMessages(ticket=obj, user=request.user))
        if user_form.is_valid():
            form_save = user_form.save(commit=False)
            form_save.ticket = obj
            form_save.save()

    else:
        user_form = TicketMessagesForm()

    return render(request, 'ticket-system.html', {'obj': obj, 'user_form': user_form, })

Моя попытка выглядит следующим образом в шаблоне

 {% for i in request.user.ticketmessages_set.all %}
  <div>
    {% if ... %} {{ i.user_message }} {% endif %}
  </div>
  <br />
  {% endfor %}

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

С помощью related_name вы можете легко осуществлять обратную связь с объектами ForeignKey. Добавьте его к вашему models.py:

class Ticket(models.Model):
    user = models.ForeignKey(
        ...
        related_name='tickets'
    )

class TicketMessages(models.Model):
    user = models.ForeignKey(
        ...
        related_name='messages'
    )

Затем в шаблоне вы можете обратиться к набору запросов:

{% for i in request.user.messages.all %}
...

or 

{% for i in request.user.tickets.all %}
...

В files.py вы можете получить набор queryset, который вы можете в дальнейшем обрабатывать как любой другой объект QuerySet. Например:

SomeUser.messages.filter(user_message__starts_with='Alert!')
Вернуться на верх