首页 > 解决方案 > 在 django 的更新中使用子查询

问题描述

我目前收到此错误

此查询中不允许连接字段引用

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

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)

我想根据所有同名的's更新baz所有实例的字段FooBazFoobar

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

标签: pythonpython-3.xdjangodjango-3.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]
    )
)

推荐阅读