【问题标题】:getting foreign key value without fetching the entire object?在不获取整个对象的情况下获取外键值?
【发布时间】:2012-01-13 19:55:53
【问题描述】:

假设我有这些模型:

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() 来摆脱这些额外的查询,但我的问题与此无关。)

谢谢!

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    这应该可以工作

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

    【讨论】:

      【解决方案2】:

      有一个很好的捷径,它只获取父 ID 和 slug,因此效率更高:

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

      【讨论】:

      • 很酷地使用 values_list 和 dict!不知何故,我不认为我曾经使用 values_list 作为即时键值映射。
      【解决方案3】:

      试试:

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

      编辑

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

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

      【讨论】:

      • 我试过了,它有效:),正如我在问题中指出的那样,我很想知道是否有一种方法可以在不加入父表的情况下从子表中获取密钥。
      猜你喜欢
      • 2010-10-03
      • 2013-05-19
      • 2011-02-03
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2012-09-12
      相关资源
      最近更新 更多