在 django 的更新中使用子查询

Use of Subquery on django's update

我目前遇到这个错误

Joined field references are not permitted in this query

知道为什么我这样做会发生这种情况吗? (模型重新创建为更简单的版本)

class Foo(models.Model):
    bar = models.ForeignKey(
       Bar, related_name='foos', on_delete=models.CASCADE)
    baz = models.ForeignKey(
       Baz, related_name='foos', null=True, blank=True,
       on_delete=models.SET_NULL)

class Bar(models.Model):
    name = models.CharField(max_length=255)

class Baz(models.Model):
    name = models.CharField(max_length=255)

我想根据所有 BazFoobar 同名更新所有 Foo 实例的 baz 字段

Foo.objects.update(
    baz=Subquery(
        Baz.objects.filter(
            name=OuterRef('bar__name')
        ).values('pk')[:1]
    )
)

我通过 Bar 的模型访问它并链接 OuterRef

使其工作
Foo.objects.update(
    baz=Subquery(
        Baz.objects.filter(
            name=Subquery(
                Bar.objects.filter(
                    pk=OuterRef(OuterRef('bar_id'))
                ).values('name')[:1]
            )
        ).values('pk')[:1]
    )
)