【发布时间】:2019-04-08 06:35:31
【问题描述】:
我有以下型号:
class Category(models.Model):
....
posts = models.PositiveIntegerField(_('numero post'), default=0)
....
class Post(models.Model):
....
categories = models.ManyToManyField(Category, blank=True, verbose_name=_('categorie'))
....
Category.posts 字段统计与其所属类别相关的帖子数。我通过以下方式将计数器增加到CreateView:
class CreatePostView(LoginRequiredMixin, CreateView):
model = Post
...
def form_valid(self, form, **kwargs):
...
categories = self.object.categories.all()
for category in categories:
category.posts = category.posts + 1
category.save()
self.object.save()
return super(CreatePostView, self).form_valid(form)
当我删除博客文章时,我需要在删除 Post 时减少计数器。我试过这样做:
class DeletePostView(LoginRequiredMixin, DeleteView):
model = Post
...
def form_valid(self, form, **kwargs):
...
categories = post.categories.all()
for category in categories:
if (category.posts - 1) > 0:
category.posts = category.posts - 1
category.save()
return post
但它不起作用,因为在调用此方法之前记录已被删除。
在删除记录之前如何进行此操作?
或者有内置的方法从Category获取相关记录的数量?
【问题讨论】:
-
category.posts在这里做什么?通过这个你可以防止它达到零? -
怎么看,
category.posts是PositiveIntegerField可以小于0 -
但现在它永远不会变为零或负值。因此,如果最后一个帖子被删除,那么它仍然会有 1。
标签: python django django-models django-forms django-views