如何使用 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
模型删除未使用的标签可能不是一个好主意,因为 Comment
或 Product
等仍然可以使用给定的标签。
我正在制作一个使用 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
模型删除未使用的标签可能不是一个好主意,因为 Comment
或 Product
等仍然可以使用给定的标签。