Django: сортировать запрос по общему значению столбца - PullRequest
0 голосов
/ 20 апреля 2011

Эй, допустим, у меня есть эта модель:

class Log:
 msg = CharField(...)
 project = ForeignKey(..)
 date = DateField(..)

Теперь предположим, что я хочу выбрать 4 самых последних журнала:

 logs = Log.objects.order_by('project').order_by('-date')[:4]

Далее, я хочу извлечь журналы, которые совместно используют один и тот же проект, поэтому в моем шаблоне я хотел бы сделать что-то вроде:

 {% for proj in projects %}
   [Do something with the proj model instance]
   {% for log in proj.logs(?) %}
     [Do something with logs]
   {% endfor %}
 {% endfor %}

Как?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011
{% for proj in projects %}
  {{ proj.name }}
  {% for log in proj.log_set.all %}
    {{ log.msg }}
  {% endfor %}
{% endfor %}

Если вы используете related_name для своего ForeignKey (скажем, «logs»), вы можете использовать proj.logs вместо proj.log_set.Проверьте документы .

Если вам нужны самые последние журналы для проекта на регулярной основе, я бы подумал написать метод для вашей модели проекта:

def recent_logs(self):
    return self.log_set.all()[:4]

Затем вы можете настроить цикл в вашем шаблоне так, чтобы:

{% for log in proj.recent_logs %}
    {{ log.msg }}
{% endfor %}
0 голосов
/ 20 апреля 2011

В вашем шаблоне вы можете перегруппировать по проекту.

Из документов что-то (не проверено), как

{% regroup logs|dictsort:"project.id" by project as project_list %}

{% for project in project_list %}
    {{ project.grouper }}
        {% for item in project.list %}
            [Do something with logs]
        {% endfor %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...