删除未使用标签的更好方法。 / django taggit python
Better way to delete unused tag. / django taggit python
嗨,我是 python django 初学者。
我正在创建一个简单的博客
我想删除在删除 post
时未使用的标签
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField(max_length=500)
create_date = models.DateTimeField(auto_now_add=True)
modify_date = models.DateTimeField(auto_now=True)
tags = TaggableManager(blank=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='owner', blank=True, null=True)
class PostDelete(WriterCheckMixin, DeleteView):
model = Post
success_url = reverse_lazy('blog:list')
def delete(self, request, *args, **kwargs):
temp = Post.objects.get(pk=kwargs['pk'])
for tag in temp.tags.all():
if tag.taggit_taggeditem_items.count() <= 1:
tag.delete()
return super().delete(request, *args, **kwargs)
我只是按照教程学习,所以不知道 DeleteView 后面发生了什么。
它按预期工作,但似乎效率低下。
我需要"temp = Post.objects.get(pk=kwargs['pk'])"吗?
请多多指教
您可以删除未使用的标签:
from django.db.models import Count
from taggit.models import Tag
class PostDelete(WriterCheckMixin, DeleteView):
model = Post
success_url = reverse_lazy('blog:list')
def delete(self, request, *args, **kwargs):
try:
return super().delete(request, *args, **kwargs)
finally:
Tag.objects.annotate(
<b>ntag=Count('taggit_taggeditem_items')</b>
).filter(<b>ntag=0</b>).delete()
这将因此注释查询集,并删除没有相关项目的标签。
话虽这么说,但我不确定您本身为什么需要删除未使用的标签。您可以决定仅 render 具有一项的标签。但是将标签存储在数据库中,通常不会导致大量磁盘使用。
嗨,我是 python django 初学者。
我正在创建一个简单的博客
我想删除在删除 post
时未使用的标签class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField(max_length=500)
create_date = models.DateTimeField(auto_now_add=True)
modify_date = models.DateTimeField(auto_now=True)
tags = TaggableManager(blank=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='owner', blank=True, null=True)
class PostDelete(WriterCheckMixin, DeleteView):
model = Post
success_url = reverse_lazy('blog:list')
def delete(self, request, *args, **kwargs):
temp = Post.objects.get(pk=kwargs['pk'])
for tag in temp.tags.all():
if tag.taggit_taggeditem_items.count() <= 1:
tag.delete()
return super().delete(request, *args, **kwargs)
我只是按照教程学习,所以不知道 DeleteView 后面发生了什么。
它按预期工作,但似乎效率低下。
我需要"temp = Post.objects.get(pk=kwargs['pk'])"吗?
请多多指教
您可以删除未使用的标签:
from django.db.models import Count
from taggit.models import Tag
class PostDelete(WriterCheckMixin, DeleteView):
model = Post
success_url = reverse_lazy('blog:list')
def delete(self, request, *args, **kwargs):
try:
return super().delete(request, *args, **kwargs)
finally:
Tag.objects.annotate(
<b>ntag=Count('taggit_taggeditem_items')</b>
).filter(<b>ntag=0</b>).delete()
这将因此注释查询集,并删除没有相关项目的标签。
话虽这么说,但我不确定您本身为什么需要删除未使用的标签。您可以决定仅 render 具有一项的标签。但是将标签存储在数据库中,通常不会导致大量磁盘使用。