我使用django管理站点,有两个表,一个是Category
,其中totalitems
列存储此类别的总数,另一个是Article
,{{1有一个外键引用Article
,当我在管理站点中创建一篇新文章时,更新应该增加Category
,我以这种方式失败了:
models.py
Category totalitems
虽然sql操作成功,但是列totalitems没有更新,我在哪里做错了?哪个是在模型或django AdminSite中自动更新受影响模型的最佳位置?
答案 0 :(得分:2)
更改过滤器表达式:
Category.categories.filter(pk=self.category.pk).update(
totalitems = F('totalitems') + 1)
但是如果删除totalitems
,你的错误Article
计数。更改文章的类别也会导致总计数无效。
答案 1 :(得分:1)
提供答案,提供问题评论中所要求的替代方法。
不是保持计算字段'而是在运行时通过Category类上的total_items()函数计算它。
class Category(models.Model):
#id = models.IntegerField(primary_key=True,help_text='primary key',auto_created=True)
name = models.CharField(max_length=50,help_text='category name')
description = models.TextField(default='',help_text='category description')
coverimg = models.CharField(max_length=200,default='',help_text='category front cover image')
covercolor = models.CharField(max_length=7,default='#ffffff',help_text='color for each category background')
createtime = models.DateTimeField(auto_now_add=True)
modifytime = models.DateTimeField(auto_now=True)
categories = models.Manager()
class Meta:
db_table = 'article_category'
def __str__(self):
return self.name
def total_items(self):
return Articles.objects.filter(category=self).count()