Django - 按外键过滤

问题描述 投票:0回答:1

我有2个型号

class Project(models.Model):
    name = models.TextField(max_length=150)

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

我可以使用这个命令来获取一个项目及其所有资产,这很酷。

proj = Project.objects.get(pk='QQ')

但我只想获得具有特定资产的项目,这是我的命令:

proj = Project.objects.get(pk='QQ', ass__pk=50)

但它仍然返回所有资产。然后我打开 SQL 调试模式,发现 Django 运行了 2 个 SQL。

  1. 它执行 'SELECT project.* FROM project INNER JOIN asset ON ... WHERE project.pk='QQ' AND asset.pk=50
  2. 它执行'SELECT asset.* FROM asset WHERE asset.project = 'QQ'

我认为第一个SQL就足够了,我不知道为什么要执行第二个SQL。 我使用 Django 4.2 和 Python 3.8.10,有人可以帮忙吗?

django django-rest-framework orm
1个回答
0
投票

尝试

proj = Project.objects.filter(pk='QQ', ass__pk=50).first()
© www.soinside.com 2019 - 2024. All rights reserved.