Django:将一个模型的字段链接到另一个字段
问题描述:
我正在通过Tango使用Django书籍,并决定添加一些我自己的功能,但有一个问题。Django:将一个模型的字段链接到另一个字段
我有两个型号,类别和页面
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)
现在我想要做的是使该类别该类别中的“意见”字段的所有页面的意见和
在我的测试数据库脚本人口,我做这种方式:
cats = {"Python": {"pages": python_pages,
"views": sum(page["views"] for page in python_pages),
},
"Django": {"pages": django_pages,
"views": sum(page["views"] for page in django_pages),
},
"Other Frameworks": {"pages": other_pages,
"views": sum(page["views"] for page in other_pages),
}
}
该方法适用于填充数据库,但我会如何让这个类别“意见”更新w ^每当页面“views”字段改变?
例如,如果同一类别的“视图”中的两个不同页面增加一个,那么类别的“视图”会增加两个?
答
我会添加到您的类类,而不是使用视场:
def get_views(self):
views=0
for page in pages_set:
views+=page.views
return views
答
当你需要它,而不是将其存储您应该计算这一点。
from django.db.models import Sum
my_category.page_set.aggregate(Sum('views'))
或使用annotationif你需要得到几种类别与他们的查看次数:
Category.objects.all().annotate(Sum('page__count'))
你确定你可以在设置您的分类相关对象的集合做想要这样做,而不是在实际需要时计算视图? –
@DanielRoseman不一定,我真正唯一的要求是当“页面”视图上升时让“类别”视图更新。我没有设定任何特定的方式 –