Python 删除任何其他对象未使用的标记
我试图修改此文件,以便在标记与任何其他对象不关联时将其删除 以下是我在文件末尾添加的内容:Python 删除任何其他对象未使用的标记,python,django,django-taggit,Python,Django,Django Taggit,我试图修改此文件,以便在标记与任何其他对象不关联时将其删除 以下是我在文件末尾添加的内容: # --- # 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=instan
# ---
# 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\u id
。尝试只使用instance.tag
。然后在查找标记对象时,可以替换它-
t = Tag.objects.get(pk=instance.tag_id)
与-
t = instance.tag
将_id添加到字段是获取对象主键的快捷方式。因此,instance.tag
是标记对象,instance.tag\u 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”对象没有属性“delete”异常位置:/Users/azio/.virtualenvs/proj/lib/python2.7/site-packages/taggit/models.py in,第172行Python Executable:/Users/azio/.virtualenvs/proj/bin/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/PythonPython版本:2.7.3