在 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)
我想根据所有 Baz
与 Foo
的 bar
同名更新所有 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]
)
)
我目前遇到这个错误
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)
我想根据所有 Baz
与 Foo
的 bar
同名更新所有 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]
)
)