Python 如何连接两个django模型查询集

Python 如何连接两个django模型查询集,python,django,django-models,Python,Django,Django Models,当字符串列表(表示标记)被发送到函数时,它将检索数据库中的标记,并装箱数据库中找不到的标记 然后,我需要将这两个查询集合并为一个查询集并返回,但当我尝试使用+连接这两个查询集时,它会引发错误 如何连接两个查询集 # Separate one in DB and not in DB tags_found_in_db = Tag.objects.filter(name__in = tag_strings) name_of_tags_found_in_db = [tag.name for tag in

当字符串列表(表示标记)被发送到函数时,它将检索数据库中的标记,并装箱数据库中找不到的标记

然后,我需要将这两个查询集合并为一个查询集并返回,但当我尝试使用+连接这两个查询集时,它会引发错误

如何连接两个查询集

# Separate one in DB and not in DB
tags_found_in_db = Tag.objects.filter(name__in = tag_strings)
name_of_tags_found_in_db = [tag.name for tag in tags_found_in_db]
tags_not_in_db = list(set(tag_strings) - set(name_of_tags_found_in_db))

# Bulk Create
tags_to_be_created = []

for new_tag_name in tags_not_in_db:
  tags_to_be_created.append(
    Tag(name = new_tag_name)
  )
new_tags = Tag.objects.bulk_create( tags_to_be_created )

# > TypeError: can only concatenate list (not "QuerySet") to list
return new_tags + tags_found_in_db
解决方案 无需组合任何内容,只需返回在\u db中找到的
标记,因为查询集是惰性的

但是,如果绝对需要这样做,请使用
.union
方法Queryset对象来组合Queryset

笔记
bulk\u create
不会返回Queryset对象,这使得
.union
对于您的用例来说更加不实用

工具书类 Django查询集是惰性的:

Django Queryset联合体:

解决方案 无需组合任何内容,只需返回在\u db中找到的
标记,因为查询集是惰性的

但是,如果绝对需要这样做,请使用
.union
方法Queryset对象来组合Queryset

笔记
bulk\u create
不会返回Queryset对象,这使得
.union
对于您的用例来说更加不实用

工具书类 Django查询集是惰性的:


Django Queryset Union:

因为错误表明上面的参数之一是Queryset,您需要将其转换为list。检查其中哪一个是查询集,以及为什么不将其转换为列表

也不是返回:

return new_tags + tags_found_in_db

您可以返回Tag.objects.all()-它应该返回相同的结果。如果您确实需要按照错误提示连接QuerySet,则上面的参数之一是QuerySet,您需要将其转换为list。检查其中哪一个是查询集,以及为什么不将其转换为列表

也不是返回:

return new_tags + tags_found_in_db
您可以返回Tag.objects.all()-它应该返回相同的结果。如果确实需要连接查询集