У меня есть модель todo, определенная ниже:
class Action(models.Model):
name = models.CharField("Action Name", max_length=200, unique = True)
complete = models.BooleanField(default=False, verbose_name="Complete?")
reoccurance = models.ForeignKey(Reoccurance, blank=True, null=True, verbose_name="Reoccurance")
notes = models.TextField("Notes", blank=True)
tags = TaggableManager()
class Reoccurance(models.Model):
label = models.CharField("Label", max_length=50, unique = True)
days = models.IntegerField("Days")
Я хочу перечислить все незавершенные действия:
actions = Action.objects.filter(complete=False)
Мои шаблонные циклы списка действий:
{% for action in actions %}
<p>{{ action }}</p>
{% if action.reoccurance %}
<p>{{ action.reoccurance }}</p>
{% endif %}
{% for tag in action.tags.all %}
<span>{{ tag }}</span>{% if not forloop.last %}, {% endif %}
{% endfor %}
{% endfor %}
Используя django-debug-toolbar, я вижу, что для каждого действия я Я обращаюсь к базе данных {% if action.reoccurance %} и {% for tag in action.tags.all %}.
Есть ли лучший способ написать мой запрос, чтобы база данных не пинговалась для каждой итерации цикла? Я думаю, что это как-то связано с select_related, но я не уверен, что делать с django-taggit а>.
Обновление Я получил часть своего ответа. select_related работает, но мне пришлось указать повторение, вероятно, потому, что я не могу использовать его для тегов:
actions = Action.objects.select_related('reoccurance').filter(complete=False)
Проблема все еще остается в том, что я попал в базу данных для каждого «action.tags.all» в цикле шаблона. Можно ли использовать какую-то предварительную выборку на django-taggit?