Django - 过滤外键属性

Fra*_*ham 86 django django-models django-queryset

我正在尝试根据外键的特定字段的值过滤Django中的表.

例如,我有两个模型 -

class Asset(models.Model):
    name = models.TextField(max_length=150)
    project = models.ForeignKey('Project')

class Project(models.Model):
    name = models.TextField(max_length=150)
Run Code Online (Sandbox Code Playgroud)

我想根据相关项目的名称过滤我的资产清单.

目前我正在执行两个查询:

project_list = Project.objects.filter(name__contains="Foo")
asset_list = Asset.objects.filter(desc__contains=filter,
                                  project__in=project_list).order_by('desc')
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法在主查询中指定这种过滤方式?

Fra*_*rth 130

Asset.objects.filter( project__name__contains="Foo" )

  • 是必要的? (3认同)
  • @DeadDjangoDjoker `contains` 描述了 django ORM 生成的查询中使用的比较类型,sql 可能看起来像 `LIKE '%Foo%'`。 (2认同)

Mic*_*ene 14

自从该queryset-refactor分支在1.0之前登陆以来,这已经成为可能. 机票4088暴露了这个问题.这应该工作:

Asset.objects.filter(
    desc__contains=filter,
    project__name__contains="Foo").order_by("desc")
Run Code Online (Sandbox Code Playgroud)

Django的多到一个文档有这一点,并使用Model API以下外键的其他例子.

  • 您可以添加.query.as_sql()来查看实际执行的SQL. (5认同)