使用ClusterableModel和ClusterTaggableManager存标签报QuerySet无tags属性
错误原因
filter()方法返回的是QuerySet集合对象,不是单个Quote模型实例- 额外调用的
values()方法会把查询结果转为字典列表,完全失去了模型实例的字段和方法,自然不存在tags属性 - 你已经在前面完成了
item实例的创建和保存,不需要重复查询数据库,直接操作item即可
修正后的导入脚本
import csv from quotes.models import Quote with open("test_import1.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: # 避免重复导入相同名言,可根据实际情况调整判断条件 if Quote.objects.filter(text=row["text"], author=row["author"]).exists(): continue # 创建并保存名言实例 item = Quote( text=row["text"], author=row["author"], source_url=row["url"], book=row["book"] ) item.save() # 处理标签并批量添加 tag_list = [tag.strip("' ") for tag in row["tags"].split(",")] item.tags.add(*tag_list)
补充说明
你使用的ClusterTaggableManager本身支持自动创建不存在的标签,不需要额外做标签存在性判断,上述代码即可完成标签关联的自动写入。如果有批量更新的需求,可以在判断实例存在后获取已有实例,再更新标签字段即可。
内容的提问来源于stack exchange,提问作者Niq_Lin
相关产品推荐
相关产品推荐

