加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读