2016-09-22 116 views
1

我正在通過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」字段改變?

例如,如果同一類別的「視圖」中的兩個不同頁面增加一個,那麼類別的「視圖」會增加兩個?

+0

你確定你可以在設置您的分類相關對象的集合做想要這樣做,而不是在實際需要時計算視圖? –

+0

@DanielRoseman不一定,我真正唯一的要求是當「頁面」視圖上升時讓「類別」視圖更新。我沒有設定任何特定的方式 –

回答

0

我會添加到您的類類,而不是使用視場:

def get_views(self): 
    views=0 
    for page in pages_set: 
     views+=page.views 
    return views 
0

當你需要它,而不是將其存儲您應該計算這一點。

from django.db.models import Sum 
my_category.page_set.aggregate(Sum('views')) 

或使用annotationif你需要得到幾種類別與他們的查看次數:

Category.objects.all().annotate(Sum('page__count')) 
相關問題