Допустим, у меня есть модель с именем TicketSection и TicketSubmission модели выглядят так: (упрощенно)
class TicketSection(models.Model):
title = models.CharField(max_length="35")
weight = models.IntegerField()
class TicketSubmission(models.Model):
ticket_section = models.ForeignKey('myapp.TicketSection')
cost = models.IntegerField()
submiter = models.ForeignKey('myapp.User')
submiting_account = models.ForeignKey('myapp.Account')
Теперь я хочу отфильтровать TicketSections с помощью это TicketSubmissions. Итак, я делаю:
ticket_sections = TicketSection.objects.filter(weight__gte=50).annotate(some_additional_logic)
# Generated SQL Query: SELECT * FROM myapp_ticketsection
WHERE weight >= 50
Я знаю, что вы можете выбрать обратные объекты с помощью
ticket_sections[0].ticketsubmission_set.filter(again_some_logic).annotate(logic)
# Generated SQL Query: SELECT * FROM myapp_ticketsubmission
WHERE ticket_section = [id of ticket section]
Но как мне это сделать для всех секций билетов и как использовать их в шаблоне? Должен ли я сделать:
for ticket_sec in ticket_sections:
ticket_sec.submissions = ticket_sec.ticketsubmission_set.filter(again_some_logic).annotate(logic)
, а затем в шаблоне
{% for ticket_sec in ticket_section %}
{% for submission in ticket_sec.submissions %}
{{ submission.cost }}
^ Но мне это не кажется правильным. Так как же мне обратить вспять поиск нескольких объектов, чтобы минимизировать попадания в базу данных?
Я использую Django 2.2.5 с MySQL базой данных.