【问题标题】:Deleting the tags that are not used by any other object删除未被任何其他对象使用的标签
【发布时间】:2012-12-11 15:09:42
【问题描述】:

我正在尝试修改此文件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.

您的帮助将不胜感激。

【问题讨论】:

  • 异常发生在这些行中的哪一行?

标签: python django django-taggit


【解决方案1】:

我认为您不应该在过滤器中使用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, instance, **kwargs):
    if not TaggedItem.objects.filter(tag=instance.tag):
        print "Deleting tag", instance
        instance.tag.delete()

post_delete.connect(after_deleting, sender=TaggedItem)

【讨论】:

  • 您的代码出现此错误:异常类型:AttributeError 异常值:“int”对象没有属性“删除”异常位置:/Users/azio/.virtualenvs/proj/lib/python2 .7/site-packages/taggit/models.py 在 after_deleting,第 172 行 Python 可执行文件:/Users/azio/.virtualenvs/proj/bin/python Python 版本:2.7.3
  • 恐怕我的回答的整个前提是错误的:(无论如何我已经更新了它 - 我认为这个版本应该可以正常工作。
  • Django 版本:1.4.2 异常类型:DoesNotExist 异常值:标签匹配查询不存在。异常位置:/Users/user/.virtualenvs/proj/lib/python2.7/site-packages/django/db/models/query.py 在 get,第 366 行 Python 可执行文件:/Users/user/.virtualenvs/proj/ bin/python Python 版本:2.7.3
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多