python – 删除任何其他对象未使用的标记
发布时间:2020-12-20 13:32:06 所属栏目:Python 来源:网络整理
导读:我正在尝试修改此文件 https://github.com/alex/django-taggit/blob/master/taggit/models.py,以便当标记未与任何其他对象关联时,它将被删除. 这是我添加到文件末尾的内容: # ---# Delete the tags that are not used by any other objectfrom django.db.mo
我正在尝试修改此文件
https://github.com/alex/django-taggit/blob/master/taggit/models.py,以便当标记未与任何其他对象关联时,它将被删除.
这是我添加到文件末尾的内容: # --- # Delete the tags that are not used by any other object from django.db.models.signals import post_delete def after_deleting(sender,instance,**kwargs): if TaggedItem.objects.filter(tag=instance.tag_id).count() == 0: print "Deleting tag",instance t = Tag.objects.get(pk=instance.tag_id) t.delete() post_delete.connect(after_deleting,sender=TaggedItem) 它没有按预期工作.当我运行它时出现此错误: Exception Type: DoesNotExist Exception Value: Tag matching query does not exist. 非常感谢您的帮助. 解决方法
我不认为你应该在过滤器中使用instance.tag_id.尝试使用instance.tag.然后在找到标签对象时可以替换 –
t = Tag.objects.get(pk=instance.tag_id) 与 – t = instance.tag 将_id添加到字段是获取对象主键的快捷方式.因此instance.tag是标记对象,instance.tag_id是标记对象的主键. 整件事情会更简洁 – # Delete the tags that are not used by any other object from django.db.models.signals import post_delete def after_deleting(sender,**kwargs): if not TaggedItem.objects.filter(tag=instance.tag): print "Deleting tag",instance instance.tag.delete() post_delete.connect(after_deleting,sender=TaggedItem) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |