Django:将一个模型的字段链接到另一个模型的字段

时间:2016-09-22 16:27:45

标签: python django database models

我正在使用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"观看"上升一个类别"观点"会不会上升两个?

2 个答案:

答案 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'))