【发布时间】:2021-02-02 03:03:29
【问题描述】:
我有 2 个querysets,我正在对它们应用union,但奇怪的是当我使用only 时,它会从数据库中选择所有字段,而当我使用values 时,它只会选择给定的字段。
这是从Physician 表中选择所有字段
doctors_models.Physician.objects.filter(
appointments__member=self.context['member']
).union(doctors_models.Physician.objects.filter(
appointments__booked_by=self.context['member']
)).only('id', 'name_prefix', 'first_name', 'middle_name', 'last_name', 'name_suffix')
但是
这是从Physician 表中仅选择指定字段
doctors_models.Physician.objects.filter(
appointments__member=self.context['member']
).union(doctors_models.Physician.objects.filter(
appointments__booked_by=self.context['member']
)).values('id', 'name_prefix', 'first_name', 'middle_name', 'last_name', 'name_suffix')
但是,这也是只选择指定的字段,但我为什么要定义字段 2 次。
doctors_models.Physician.objects.filter(
appointments__member=self.context['member']
).only('id', 'name_prefix', 'first_name', 'middle_name', 'last_name', 'name_suffix').union(
doctors_models.Physician.objects.filter(
appointments__booked_by=self.context['member']
).only('id', 'name_prefix', 'first_name', 'middle_name', 'last_name', 'name_suffix'))
【问题讨论】:
-
如果你有联合,两个部分必须有相同数量的字段
-
具有相同的字段。
-
不,它不仅限制了 SELECT 查询中使用的字段,您也可以通过使用 Q 对象在单个查询中正确执行此操作,Willem 已经详细解释过
标签: mysql django django-models django-queryset