将查询集的子集附加到同一个查询集(不是逻辑联合)
Append a subset of a queryset to the same queryset (not logical union)
我有一个模型:
class Person(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
如果我这样做:
all_queryset = Person.objects.all()
all_queryset.count() # --> 8
subset_queryset = Person.object.filter(name = 'John')
subset_queryset.count() # --> 1
假设我想将 subset_queryset
附加到 all_queryset
(甚至保留重复项):
result_qs = all_queryset.union(subset_queryset)
result_qs.count() # STILL 8!
# or
all_queryset |= subset_queryset
all_queryset.count() # STILL 8!
我知道它在某种意义上确实是一个逻辑联合:如果它是更全局查询集的子集,它会保持全局。 (与逻辑交集 qith 相反 &
)。
union 将获得一个可选参数 all
,该参数还将包含重复行 django doc
result_qs = all_queryset.union(subset_queryset, all=True)
我有一个模型:
class Person(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
如果我这样做:
all_queryset = Person.objects.all()
all_queryset.count() # --> 8
subset_queryset = Person.object.filter(name = 'John')
subset_queryset.count() # --> 1
假设我想将 subset_queryset
附加到 all_queryset
(甚至保留重复项):
result_qs = all_queryset.union(subset_queryset)
result_qs.count() # STILL 8!
# or
all_queryset |= subset_queryset
all_queryset.count() # STILL 8!
我知道它在某种意义上确实是一个逻辑联合:如果它是更全局查询集的子集,它会保持全局。 (与逻辑交集 qith 相反 &
)。
union 将获得一个可选参数 all
,该参数还将包含重复行 django doc
result_qs = all_queryset.union(subset_queryset, all=True)