Джанго получает названия полей из разных моделей - PullRequest
0 голосов
/ 01 октября 2010

Ребята, есть ли простой способ вернуть разные имена полей из разных моделей цепочкой объединений?Моя модель:

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"

Как мне это сделать в Джанго?

Гат

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

Вы также можете использовать это:

Stock.objects.filter(user=2).values('item__item_code', 'item__name')
2 голосов
/ 01 октября 2010

Я хочу выбрать «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

. Это вернет набор запросов только с теми полями, которые вы выбрали, используя 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 голос
/ 01 октября 2010
  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 
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...