简体   繁体   English

如何使用Django ValuesQuerySet获取相关对象?

[英]how to get related objects with django ValuesQuerySet?

I'm new in django and a simple query blocks me.. 我是django的新手,一个简单的查询阻止了我..

So, here is a slice of my model: 因此,这是我的模型的一部分:

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

this query History.objects.filter(pk=1).values() returns: 此查询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}]

Target is, that for ex. 目标是,前。 gpgkey_id is gpgkey : { gpgkey : "test", gpgid : "06B7FFF" } and so on for all the other related objects. gpgkey_id是gpgkey : { gpgkey : "test", gpgid : "06B7FFF" } ,依此类推。 How can i do that? 我怎样才能做到这一点?

I use values(), because I want the Fields and not the whole model. 我使用values(),因为我需要字段而不是整个模型。

you have to ask for them in the values method parameters, and unfortunately I think you must specify also the default you want for you starting model: 您必须在values方法参数中要求它们,但是不幸的是,我认为您还必须为启动模型指定所需的默认值:

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

if you have a long list of attributes something better can be made traversing the _meta.fields attribute of your model and building that parameter list from there, but the base idea is the previous one. 如果您有一长串的属性,则可以遍历模型的_meta.fields属性并从那里构建该参数列表,这会带来更好的效果,但是基本思想是上一个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM