如何使用 django-taggit 删除 post 和删除在 Django2.2 上未使用的标签

How to delete post and delete tag which will be unused on Django2.2 using django-taggit

我正在制作一个使用 django 和 django-taggit 的博客应用程序。我使用 django.views.generic.edit.DeleteView 创建了一个 deleteview。但是当我看到管理页面时,post 被删除但标签没有。如何删除 post 并同时删除未使用的标签?

这是我试过的代码。 如果删除 delete 函数,它只会删除 post.

views.py

class DeleteView(LoginRequiredMixin, generic.edit.DeleteView):
    model = Post
    success_url = reverse_lazy('portal:index')

    def delete(self, request, *args, **kwargs):
        deltag = self.object.tags.clear()
        result = super().delete(request, *args, **kwargs)
        return deltag,result

models.py

from django.db import models
from django.urls import reverse
from taggit.managers import TaggableManager

class Post(models.Model):


    author = models.ForeignKey('auth.User',on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    tags = TaggableManager(blank=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('portal:index')

我不相信您可以删除与 Post 相关的标签,因为另一个 Post 也可能使用其中的一些标签。

您可以删除不再使用的 Tag

from taggit.models import Tag

class DeleteView(LoginRequiredMixin, generic.edit.DeleteView):
    model = Post
    success_url = reverse_lazy('portal:index')

    def delete(self, request, *args, **kwargs):
        result = super().delete(request, *args, **kwargs)
        <b>Tag.objects.filter(post=None).delete()</b>
        return result

但是请注意,标签通常不仅用于一个模型(如 Post),而且还用于多个模型。因此,通过 Post 模型删除未使用的标签可能不是一个好主意,因为 CommentProduct 等仍然可以使用给定的标签。