[英]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.