2016-07-05 77 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) 
    ... 

我有些真是可惡的邏輯在我的模板,以顯示與給定服務器對象的服務器詳細信息頁面Django中,篩選查詢通過多個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 %} 
任何了LineItem

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 %} 

的問題是,我可以過濾下來這些有關了LineItem與一個單一的查詢?

回答

0

而不是遵循model_set管理者的反向關係。您可以通過使用Django的ORM

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

它實際上從未發生在我身上的雙下劃線符號來圓做這樣跟着ForeignKey關係!我明天工作到99%,這將是我所追求的。謝謝! –