我正在使用Django书来完成Tango,并决定添加一些我自己的功能但是有问题。
我有两个模型,分类和页面
location
现在我要做的就是制作类别"观看"字段该类别中所有页面的视图总和
在我的测试数据库填充脚本中,我这样做:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(unique=True)
class Page(models.Model):
category = models.ForeignKey(Category)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
这适用于填充数据库,但是如何使其成为类别" views"每当一个页面"观看"字段改变了?
例如,如果同一类别中的两个不同页面" s"观看"上升一个类别"观点"会不会上升两个?
答案 0 :(得分:0)
我会将此添加到您的类别类而不是使用views字段:
def get_views(self):
views=0
for page in pages_set:
views+=page.views
return views
答案 1 :(得分:0)
您应该在需要时计算,而不是存储它。您可以使用针对您的类别的相关对象集合进行聚合:
from django.db.models import Sum
my_category.page_set.aggregate(Sum('views'))
或使用注释如果您需要同时获取多个类别及其查看次数:
Category.objects.all().annotate(Sum('page__count'))