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()-它应该返回相同的结果。如果确实需要连接查询集