繁体   English   中英

如何使用 django-taggit 删除将在 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做了一个删除视图。 但是当我看到管理页面时,帖子被删除了,但标签没有。 如何删除帖子并同时删除将不使用的标签?

这是我尝试过的代码。 如果你删除delete function,它只会删除帖子。

视图.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

模型.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)
        Tag.objects.filter(post=None).delete()
        return result

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM