球员, 有没有一种简单的方法可以通过链接连接从不同的模型返回不同的字段名称? 我的模特:
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中这样做?
加特
答案 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)
仔细阅读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