获取外键值而不获取整个对象?

时间:2012-01-13 19:55:53

标签: django django-models

说我有这些模特:

class Parent(models.Model):
    slug = models.SlugField()
class Child(models.Model): slug = models.SlugField() parent = models.ForeignKey('Parent')

我想创建一个dict

{x.parent.pk : x.slug for x in Child.objects.all()}
此代码为每次迭代生成单独的数据库查询。只是为了得到Parent对象,只是为了得到它的主键。它就在Child对象的开头!我不需要父母的任何东西,只需要它的主键。如何获取基础外键的值?

(是的,我知道我可以使用select_related()来摆脱这些额外的查询,但我的问题与此无关。)

谢谢!

3 个答案:

答案 0 :(得分:5)

这应该有效

{x.parent_id : x.slug for x in Child.objects.all()}

答案 1 :(得分:2)

有一个很好的快捷方式,它只获得父ID和slugs,因此效率更高:

dict(Child.objects.values_list('parent_id', 'slug'))

答案 2 :(得分:1)

尝试:

{x.parent.pk : x.slug for x in Child.objects.select_related('parent')}

修改

对不起。误解了你想要的东西。你应该能够做到:

{x.parent_id : x.slug for x in Child.objects.all()}