说我有这些模特:
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()
来摆脱这些额外的查询,但我的问题与此无关。)
谢谢!
答案 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()}