如果我有2个通过ForeignKey关联的模型,我可以很容易地得到一个查询集,其中两个模型都使用select_related连接
class Foo(Model):
data = IntegerField()
bar = ForeignKey('Bar', on_delete=CASCADE)
class Bar(Model):
data = IntegerField()
foos_with_joined_bar = Foo.objects.select_related('bar')
for foo in foos_with_joined_bar:
print(foo.data, foo.bar.data) # this will not cause extra db queries
我想做同样的事情,但在Foo将其对bar的引用保留在JSONField中的情况下
class Foo(Model):
data = IntegerField()
bar = JSONField() # here can be something like {"bar": 1} where 1 is the ID of Bar
class Bar(Model):
data = IntegerField()
foos_with_joined_bar = ???
在这种情况下,是否可以使用Django ORM获得foos_with_joined_bar?
另外,我们不讨论在JSONField中存储外键的原因,当然最好只使用ForeignKey。
3条答案
按热度按时间iqxoj9l91#
您必须解析JSON。
qaxu7uf22#
可以将值从Bar对象注解到Foo对象
它从JSON字段中提取值并查找匹配的pk
ybzsozfc3#
最后,我发现了一个有点棘手的方法来注解Foo与完整的酒吧模型。
TLDR:使用JSONObject用Bar的dict表示注解Foo,然后使用此dict手动创建foo.bar
经理.py
型号.py
已经完成了,现在我们可以做这样的事情了