2016-07-05 1 views
-1
class Server(models.Model): 
    client = models.ForeignKey(Client, on_delete=models.CASCADE) 
    ... 

class Schedule(models.Model): 
    client = models.ForeignKey(Client, on_delete=models.CASCADE) 
    ... 

class LineItem(models.Model): 
    schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE) 
    server = models.ForeignKey(Server, blank=True, null=True) 
    ... 

У меня есть некоторая действительно противная логика в моем шаблоне, чтобы отобразить любые LineItems, относящиеся к данному объекту сервера в подробном сервере страницеДжанго, фильтр запрос установить многократный entry_set.all() отношения

{% for schedule in server.client.schedule_set.all %} 
    {% for lineitem in schedule.lineitem_set.all %} 
     {% if lineitem.server == server %} 
      {{ lineitem.id }} 
      {{ lineitem.description }} 
     {% endif %} 
    {% endfor %} 
{% endfor %} 

UPDATE: для разъяснения

Я могу получить соответствующую информацию изнутри зрения следующим:

def serverDetailView(request, pk): 
    # Fetches all the line items related to the current server 
    server = get_object_or_404(Server, pk=pk) 
    line_items = [] 
    for schedule in server.client.schedule_set.all(): 
     items = schedule.lineitem_set.all() 
     for item in items: 
      if item.server == server: 
       line_items.append(item) 
    context = {'server': server, 'line_items': line_items} 
    return render(request, 'reports/server_detail.html', context) 

Затем в шаблоне:

{% for item in line_items %} 
    {{ item }} 
{% endfor %} 

Вопрос заключается в том, могу ли я отфильтровывать эти соответствующие LineItems с помощью одного запроса?

ответ

0

Вместо того, чтобы следовать обратным отношениям model_set менеджеров. Вы можете следить за ForeignKey отношения с помощью двойного подчеркивания обозначения из Django ORM

line_items = LineItem.objects.filter(schedule__client=server.client) 
+0

Это никогда не происходило со мной, чтобы сделать этот путь вокруг! Я работаю до завтра. Я на 99%, это будет то, что мне нужно. Благодаря! –