我有两个模型
model A:
cid = ...
rating = ...
model B:
id = ... (this id is same as cid in model A. But no foreign key directly)
name = ....
现在我需要评分大于 3 的所有 modelB 对象的列表。
我还需要评级字段在结果查询集中可用。
我做了以下,
good_rating_A_queryset = A.filter(rating__gt=3)
good_rating_B_queryset = B.filter( id__in = good_rating_A_queryset.values("cid") )
现在我有所有评分大于 3 的 B 对象。
现在我想在
rating
中保留good_rating_A_queryset
的good_rating_B_queryset
字段,这样我就可以序列化它并发送到前端。
我正在使用 DRF 进行序列化。我想访问像
good_rating_B_queryset.first().rating
这样的评级
我以为我可以使用注释但无法弄清楚如何映射字段
请帮忙
我同意@WillemVanOnsem,在定义两个相互依赖的模型时最好使用 OneToOne 或 ForeignKey。这就是数据库中存在关系的原因。
除此之外,如果您仍然需要来自另一张桌子的
rating
,那么您可以使用Subquery
。像这样:
from django.db.models import OuterRef, Subquery
good_rating_A_queryset = A.filter(pk=OuterRef('pk')).values('rating')
good_rating_B_queryset = B.annotate(rating=Subquery(good_rating_A_queryset[:1])).filter(rating__gt=3)