2015-01-02 3 views
1

Я новичок в Django и простых блоков запросов меня ..Как получить связанные объекты с django ValuesQuerySet?

Итак, вот кусочек моей модели:

class History(models.Model): 
    timestamp = models.DateTimeField(auto_now_add=True) 
    name  = models.CharField(max_length=200) 
    user  = models.ForeignKey(User) 
    state  = models.ForeignKey(Status) 
    reason = models.TextField() 
    gpgkey = models.ForeignKey(Key) 

def __unicode__(self): 
    return self.name 

class Key(models.Model): 
    gpgkey  = models.CharField(max_length=128) 
    gpgid  = models.CharField(max_length=32) 
    path  = models.CharField(max_length=200) 

    def __unicode__(self): 
     return self.gpgkey 

этот запрос History.objects.filter(pk=1).values() возвращается:

[{'user_id': 1, 'name': u'test-4.30-6', 'timestamp': datetime.datetime(2015, 1, 1, 20, 2, 0, 578794, tzinfo=<UTC>), 'gpgkey_id': 1, 'reason': u'blablabla', 'state_id': 2, u'id': 1}] 

Цель такова, что для ex. gpgkey_id - gpgkey : { gpgkey : "test", gpgid : "06B7FFF" } и т. д. для всех других связанных объектов. Как я могу это сделать?

Я использую значения(), потому что я хочу поля, а не целую модель.

+0

Вы можете использовать JSON. Здесь вы найдете дополнительную информацию: http://stackoverflow.com/a/15538391/2154023 – torm

+1

Зачем вам нужны поля, а не экземпляр модели? Не используйте 'values ​​()', если вам явно не нужен словарь элементов 'key: value', и вы на 100% уверены, что вам не нужны какие-либо методы модели. – knbk

+1

Я хочу отправить его назад (api like), поэтому я хочу только значения, а не модель. – njoy

ответ

0

вы должны спросить у них в параметрах метода значения, и, к сожалению, я думаю, вы должны также указать значение по умолчанию вы хотите для вас начиная с модели:

History.objects.filter(pk=1).values('gpgkey__gpgkey', 'gpgkey__gpgid', 'gpgkey__path', 'timestamp', 'name', 'user', 'state', 'reason') 

, если у вас есть длинный список атрибутов что-то лучше может быть произведена пересечение атрибута _meta.fields вашей модели и построение этого списка параметров оттуда, но основная идея - предыдущая.

Смежные вопросы