代码之家  ›  专栏  ›  技术社区  ›  sedavidw

在Django查询中使用values()获取Model而不是ID

  •  3
  • sedavidw  · 技术社区  · 11 年前

    我在Django中有以下设置

    class Class1(Model):
    
        search_field = IntegerField()
        field2 = ForeignKey(Class2)
    
    class Class2(Model):
    
        field3 = ForeignKey(Class3)
    
    class Class3(Model):
    
        #lots of useful stuff...
    

    我正在进行查询 Class1 为了找回一个 Class3 然而 类别1 Class2 有很多信息我不想加载,所以我想使用 values (或者让我更高效地完成这项工作的东西)。我做了一些类似的事情

    q = Class1.objects.filter(search_field=search_criteria).values('field2__field3').latest()
    

    但当这回来时,我得到了一本字典,看起来像:

    {'field2__field3': ID}
    

    哪里 ID 类别3 。有没有方法直接从 价值观 (或其他查询实用程序)?

    2 回复  |  直到 11 年前
        1
  •  4
  •   Kevin Christopher Henry    11 年前

    Django查询的一个简单规则是始终查询您想要返回的内容。所以如果你想 Class3 ,开始查询。

    Class3.objects.filter(class2__class1__search_field=search_criterion).latest()
    
        2
  •  4
  •   user9876    11 年前

    重写代码以:

    q = Class3.objects.filter(class2__class1__search_field=search_criteria)
    

    一、 e.直接询问你真正想要的对象,并使用从Class3到Class2和Class1的反向关系作为过滤条件的一部分。

    这可能有助于设置 related_name related_query_name ForeignKey 如果设置了,这些是filter()参数中要使用的名称。如果未设置,则默认为类名。