2017-06-06 61 views
0

當我遍歷一個Prize.objects.all()集合時,我試圖從PrizeItem獲得quantity值,但它似乎只引用GameItem模型,而不引用提供訪問中間PrizeItem屬性。在穿透關係中獲取中間模型的值

我該如何訪問穿透模型的屬性?

機型:

class GameItem(models.Model): 
    '...' 


class Prize(models.Model):  
    '...' 

    item   = models.ManyToManyField(GameItem, through='PrizeItem') 

class PrizeItem(models.Model):  
    #relations 
    game_item  = models.ForeignKey(GameItem, on_delete=models.CASCADE) 
    prize   = models.ForeignKey(Prize, on_delete=models.CASCADE) 
    #Item details 
    quantity   = models.IntegerField(null=True, blank=True, default=1) 

瀏覽次數:

def gameprizes(request): 
    prizes=Prize.objects.all() 
    context={'prizes':prizes} 
    return render(request, "the-app/game-prizes.html", context) 

模板:

{% if prize.item.all %} 
<table class="table table-condensed"> 
    <tbody> 
    {% for prize_item in prize.item.all %} 
     <tr> 
      <td>{{ prize_item.type }}</td><td>{{ prize_item.name }} {{ prize_item.quantity }}</td> 
     </tr> 
    {% endfor %} 
    </tbody> 
</table> 
{% endif %} 
+0

你如何使用查詢集?你的循環是什麼樣的? – karthikr

+0

已更新,以顯示更詳細的信息 – Pipsqweek

+0

理想情況下,我希望能夠在不需要進行大量查詢或進行復雜連接(也是徵稅)的情況下提供「數量」 – Pipsqweek

回答

0

就有點難看,當它涉及到查詢集中的中間模型。你能解決這個問題的方法之一是:

class Prize(models.Model):  
    '...' 

    item   = models.ManyToManyField(GameItem, through='PrizeItem') 

    def quantity(self): 
     return self.item.quantity 

注意,這確實會導致更多的疑問,您可以使用prefetch_related在查詢優化

另一種選擇是使用的模板

對於遊戲項目,你會做這樣的事情:

class GameItem(models.Model): 
    '...' 

    def quantity(self): 
     return self.prizeitem_set.first() 
0
  1. 什麼是地獄與模型? 〜>使用@karthikr答案
  2. 在views.py剛準備(覆蓋query_set)
  3. 使用(_set〜加盟)在HTML

有一個愉快的一天,不讓人很難,給最強的部分(服務器 - 數據庫)

相關問題