Django从不同的模型获取字段名称

时间:2010-10-01 12:17:29

标签: 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中这样做?

加特

3 个答案:

答案 0 :(得分:2)

  

我想选择“Item.Item_code,Item.name,Stock.qty,其中Stock.userid = 2,Item.item_code = Stock.Item_Code”

如果您从Stock模型开始,则可以使用一个SQL选择这些特定字段。例如

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

这将返回一个查询集,其中只包含您使用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()
    ...

答案 1 :(得分:2)

您也可以使用:

Stock.objects.filter(user=2).values('item__item_code', 'item__name')

答案 2 :(得分:1)

  1. 首先更改字段名称
  2. 仔细阅读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