2010-10-01 70 views
0

夥計, 是否有一種簡單的方法可以通過鏈接連接返回不同模型中的不同字段名稱? 我的模型:Django從不同的模型獲取字段名稱

Class Item(models.Model): 
    item_code = models.CharField(max_length=10) 
    name = models.CharField(max_length=255) 
    ... 

Class Stock(models.Model): 
    item_code = models.ForeignKey(Item) 
    userid = models.ForeignKey(User) 
    qty = models.IntegerField() 
    ... 

我想選擇「Item.Item_code,Item.name,Stock.qty其中Stock.userid = 2和Item.item_code = Stock.Item_Code」

怎麼辦我在Django做這個?

迦特

回答

1
  1. 所有變化的首先的Fileds名
  2. 閱讀本非常carefuly http://docs.djangoproject.com/en/dev/ref/models/querysets/

    Class Item(models.Model): 
        item_code = models.CharField(max_length=10) 
        name = models.CharField(max_length=255) 
        ... 
    Class Stock(models.Model): 
        item = models.ForeignKey(Item) 
        user = models.ForeignKey(User) 
        qty = models.IntegerField() 
        ... 
    
    
    #view 
    stocks = Stock.objects.filter(user=2) 
    for stock in stocks: 
        print stock.item.item_code, stock.item.name 
    #one query version 
    
2

我要選擇 「Item.Item_code,Item.name,Stock.qty其中Stock.userid = 2和Item.item_code = Stock.Item_Code」

你可以選擇這些特定字段只有使用一個SQL,只要您從Stock模型開始。例如

q = Stock.objects.select_related('userid', 'item_code').filter(
    userid__id = 2).values('item_code__item_code', 'item_code__name', 'qty') 

如果您想限制數據和查詢數量,這將有所幫助。如果你不與此有關然後執行:

q = Stock.objects.filter(userid__id = 2) 
for stock in q: 
    print stock.item_code.item_code 
    print stock.item_code.name 
    print stock.qty 

這將返回一個QuerySet,只有那些你已經使用values選擇領域。然後你可以遍歷它。

PS:Re:你的模型。

Class Stock(models.Model): 
    item_code = models.ForeignKey(Item) 
    userid = models.ForeignKey(User) 
    qty = models.IntegerField() 
    ... 

對於FK關係使用小寫字母的型號名稱是一個好主意。對於例如你應該寫:

Class Stock(models.Model): 
    item = models.ForeignKey(Item) # Changed 
    user = models.ForeignKey(User) # Changed 
    qty = models.IntegerField() 
    ... 
2

您也可以使用此:

Stock.objects.filter(user=2).values('item__item_code', 'item__name') 
相關問題