django 往空的QuerySet中 union其他QuerySet的时候怎么保留其中的自定义字段
时间: 2024-03-01 09:51:50 浏览: 26
当你使用 Django 中的 QuerySet.union() 方法时,它会返回一个新的 QuerySet 对象,其中仅包含两个原始 QuerySet 的组合结果。在这种情况下,自定义字段将不会保留。
不过,你可以使用两个 QuerySet 的共同字段来创建一个新的自定义字段,然后将其传递给 union() 方法,以便保留自定义字段。例如,假设你有两个 QuerySet,其中包含以下字段:
QuerySet 1: id, name, age
QuerySet 2: id, city, country
你可以将它们组合成一个新的 QuerySet,并保留自定义字段,如下所示:
```
from django.db.models import Value, CharField, IntegerField
from django.db.models.functions import Cast
q1 = Q1.objects.annotate(age_str=Cast('age', CharField()))
q2 = Q2.objects.annotate(city_str=Value('', CharField()), country_str=Value('', CharField()))
result = q1.union(q2).annotate(
id_str=Cast('id', CharField()),
age=Cast('age_str', IntegerField()),
city=Cast('city_str', CharField()),
country=Cast('country_str', CharField())
).values('id_str', 'name', 'age', 'city', 'country')
```
在这里,我们使用 annotate() 方法向 QuerySet 1 中添加一个新的 age_str 字段,并使用 Value() 方法添加了两个空的自定义字段(city_str 和 country_str)到 QuerySet 2 中。然后,我们使用 union() 方法将两个 QuerySet 组合在一起,并使用 annotate() 方法来创建一个新的 QuerySet,其中包含所有自定义字段。最后,我们使用 values() 方法选择要返回的字段。
注意:这个例子只是一种可能的解决方案,具体取决于你的数据模型和查询需求。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)