假设我有 2 个查询集:
<Queryset [a, b, c]>
和<Queryset [a, d, e]>
我怎样才能合并这两个来实现:
<Queryset [a, b, c, d, e]>
真实案例编辑:
qs_home = Match.objects.filter(competition=competition) \
.values(name=F("home_team__name")) \
.annotate(home_win=Sum(Case(When(home_score__gt=F('away_score'), then=1)))) \
.annotate(home_draw=Sum(Case(When(home_score=F('away_score'), then=1)))) \
.annotate(home_lose=Sum(Case(When(home_score__lt=F('away_score'), then=1)))) \
.annotate(home_goal=Sum('home_score')) \
.annotate(home_conceded=Sum('away_score')) \
.annotate(home_point=Sum(Case(
When(home_score__gt=F('away_score'), then=3),
When(home_score=F('away_score'), then=1)
))) \
.order_by('home_team__name')
qs_away = Match.objects.filter(competition=competition) \
.values(name=F("away_team__name")) \
.annotate(away_win=Sum(Case(When(away_score__gt=F('home_score'), then=1)))) \
.annotate(away_draw=Sum(Case(When(away_score=F('home_score'), then=1)))) \
.annotate(away_lose=Sum(Case(When(away_score__lt=F('home_score'), then=1)))) \
.annotate(away_goal=Sum('away_score')) \
.annotate(away_conceded=Sum('home_score')) \
.annotate(away_point=Sum(Case(
When(away_score__gt=F('home_score'), then=3),
When(away_score=F('home_score'), then=1)
))) \
.order_by('away_team__name')
如果我做
qs_home.union(qs_away)
qs_away
只需在 qs_home
的末尾附加来自 qs_home
的键但 qs_away
的值
union()
并通过查看您的查询集示例,您似乎也想要唯一值,因此请尝试以下操作:
q1 = Model.objects.filter(name__in=['a', 'b', 'c'])
q2 = Model.objects.filter(name__in=['a', 'd', 'e'])
combined_qs = q1.union(q2)
这将返回一个新的查询集,其中包含来自
q1
和q2
的所有不同元素在您的情况下,它将是:
<QuerySet [a, b, c, d, e]>