【发布时间】:2021-07-29 04:49:12
【问题描述】:
我目前正在开发一个 Django 博客应用程序,其中我有一个 Post 连接到一个 Category。 Category 具有 name 和 times_used 字段。 times_used 将在创建 Post 后增加 1,并且我已经实现了覆盖 Post 模型上的 save() 方法。我正在尝试覆盖 delete() 方法以将当前帖子的类别减 1,但它实际上并没有达到似乎覆盖的 delete() 方法,因为即使在帖子被删除后类别仍然具有增量值。请参阅下面的代码...
model.py
class Category(models.Model):
name = models.CharField(max_length=150, unique=True)
times_used = models.IntegerField(default=0)
class Post(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
# This increments this category by 1 then saves the post - Works well!
def save(self, *args, **kwargs):
self.category.times_used += 1
self.category.save()
super(Post, self).save(*args, **kwargs)
# This decrements this category by 1 then deletes the post - Which is not working...
def delete(self, *args, **kwargs):
self.category.times_used -= 1
self.category.save()
super(Post, self).delete(*args, **kwargs)
有什么建议可以做到这一点吗?
【问题讨论】:
-
你能说明你是如何删除
Post的吗? -
我只是从管理站点中删除。然而,我读到了
Django signals并找到了一种方法来实现我想要的。不过感谢您的回复。 -
是的,我在问这个问题,因为在覆盖
delete时,如何删除非常重要;) -
根据我的理解,只要我们想使用 QuerySet 批量删除对象,覆盖方法将不起作用。
标签: python django django-models django-signals