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

Django QuerySet直接访问外键字段,而不强制连接

  •  6
  • OverClocked  · 技术社区  · 14 年前

    假设您有一个模型条目,其中一个字段“author”指向另一个模型作者。假设此字段可以为空。

    如果我运行以下查询集:

    Entry.objects.filter(author=X)

    有没有办法告诉Django只检查pk,而不跟踪链接?

    谢谢。

    (很抱歉我之前没有说得更清楚,感谢lazerscience和Josh的回答)。

    5 回复  |  直到 14 年前
        1
  •  1
  •   Josh Smeaton    14 年前

    这不符合预期吗?

    Entry.objects.filter(author=X.id)
    

    您可以在外键筛选器中使用模型或模型id。我还不能检查它是否执行单独的查询,尽管我真的希望它不会。

        2
  •  1
  •   Bernhard Vallant    14 年前

    如果按您描述的做,不要使用 select_related() Django根本不会执行任何连接—不管您是筛选相关对象的主键还是相关对象本身(这没有任何区别)。

    您可以尝试:

    print Entry.objects.(author=X).query
    
        3
  •  1
  •   Jeeyoung Kim    14 年前

    假设Author的外键名为Author\u id(如果没有为ForeignKey字段指定外键列的名称,则应为name\u id,如果指定了名称,则检查模型定义/数据库架构),

    Entry.objects.filter(author_id=value)

    应该有用。

        4
  •  0
  •   Jeeyoung Kim    14 年前
        5
  •  0
  •   Dan Fuller    8 年前

    很晚了,但我刚碰到这个。我在用 Q 对象来构建查询,因此在我的示例中,这很好:

    ~Q(author_id__gt=0)
    

    NOT ("author_id" > 0  AND "author_id" IS NOT NULL)
    

    Entry.objects.exclude(author_id__gt=0)