【问题标题】:How to Query in django ORM for foreign key fields如何在 django ORM 中查询外键字段
【发布时间】:2016-04-06 14:32:05
【问题描述】:
class Company(models.Model):
    name = models.CharField(max_length=60)

class Employee(models.Model):
    dept  = models.ForeignKey(Company)

Django ORM:这里我想通过Django ORM中的Employee类访问name

I wrote something like this:  `Employee.objects.filter(name = dept__Company)`(Used two double underscore for other model class)

请问以上是正确的吗?有人有什么想法吗?

【问题讨论】:

  • 我很好奇,您的字段中真的有. 吗?我很惊讶这会起作用...请显示实际代表您的模型的示例代码ForeignField 也不是有效的类
  • 不。这是一个复杂的应用程序。只是为了示例,我这样写。无论如何我都会更改字段。请再次查看问题..

标签: django django-models django-queryset


【解决方案1】:

据我了解,您只是想检索属于某家公司的员工。为此,您可以使用其中任何一个。

my_company_instance.employee_set.all()
Employee.objects.filter(dept__name=my_company_instance)

我个人更喜欢第一种方法。

更多信息可以看Lookups that span relationships

【讨论】:

  • 太好了。实际上我想在“名称”字段上应用 order_by。但我没有员工表中的姓名字段。所以我不知道如何继续......
  • @danny - 本质上是一样的,所有查询集都使用field_name__related_field_name 的形式,所以你可能想要.order_by('dept__name')(或'-dept__name' 用于反向排序)
  • @danny 您可以通过调用任何查询集对象的.query 属性来查看结果 sql。例如print Employee.objects.filter(dept__name='company_name').order_by('dept__name').query
  • @crash843 如果我的模型类 'Company' 存在于我的应用程序的不同 API 中(这意味着不存在于相同的 models.py 上),那么如何借助员工模型类访问名称?
  • @danny 不确定我理解正确,你能粘贴一些代码吗?
猜你喜欢
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2013-08-01
  • 2019-02-17
  • 2023-02-03
  • 2017-12-17
  • 2020-11-22
  • 2018-02-24
相关资源
最近更新 更多