Так что это немного странно для описания, пожалуйста, потерпите меня :) Попытка объяснить без кода не имеет большого смысла, поэтому вот краткий пример:
class Employee(models.Model):
name = models.CharField(max_length=100)
class Location(models.Model):
address = models.CharField(max_length=200)
employees = models.ForeignKey(Employee)
class Company(models.Model):
name = models.CharField(max_length=100)
locations = models.ForeignKey(Location)
Допустим, мы хотим распечатать каждого сотрудника в конкретной компании с помощью шаблона. Обычно мы просто делаем это:
{% for location in company.locations.all %}
{% for employee in location.employees.all %}
{{ employee.name }} <br/>
{% endfor %}
{% endfor %}
Это прекрасно работает, но в этом случае я хотел бы распечатать заголовок вверху списка сотрудников, если есть какие-либо сотрудники, но пропустить заголовок, если нет сотрудников. В типичном цикле я использую forloop.first
, чтобы указать, что заголовок должен быть показан, но в этом случае я не могу. Если я попробую это во внешнем цикле (местоположения), я могу получить заголовок, когда нет сотрудников, если я попробую это во внутреннем цикле (сотрудники), я получу заголовок только для местоположений с сотрудниками, но я получу один заголовок для каждого местоположения вместо одного для всего списка.
Теперь, моим идеальным решением для этого было бы пропустить шаг вместе и иметь некоторый способ перебора всех сотрудников на уровне компании:
{% for employee in company.employees %}...{% endfor %}
Где employees
на уровне компании - это, по сути, объединение запросов сотрудников, установленных для каждого местоположения. Я изучил собственные менеджеры, но не уверен, как их использовать в этом сценарии.
Надеюсь, это имеет какой-то смысл. Спасибо за любые предложения!