Django обратный просмотр БД для нескольких объектов - PullRequest
0 голосов
/ 14 марта 2020

Допустим, у меня есть модель с именем 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 базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...