python - 在 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
所有实例的字段Foo
Baz
Foo
bar
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]
)
)
推荐阅读
- android - 如何阻止 Android Studio 中内置的 Android 应用等待调试器附加?
- node.js - ReactJS 的环境设置
- c# - C# - 按元素的首字母排序列表 (StartsWith)
- c# - 将两个随机生成的数字相乘,直到满足条件
- jenkins - Jenkinsfile 库方法文档
- three.js - 提取动画顶点
- jquery - 未捕获的类型错误:$(...).indexOf 不是函数
- vb.net - 初学者 - 在 Datagridview (VB.net) 中选择一行
- android - 如何立即获得 JSON 响应
- javascript - 未捕获的 SyntaxError:请求的模块“./add.js”未提供名为“add”的导出