2016-09-16 65 views
0

我要尋找一個可擴展的方式來創建新的用戶點子集而不每次創建一個新的子集的時間遷移。創建點子集

例如,說我有一個users應用與模型,其中total_pointspts_1pts_2pts_3每個用戶的總和。

我還創建了一個campaigns的應用程序,使用戶能夠通過執行操作獲得積分(比如,點擊一個按鈕簡單)。我可以通過Django管理增加新的活動的平臺,並設置它,這樣當用戶完成了活動,他們與分計入,使得(campaign, pk=n)學分該用戶的pts_n

但是,爲了做到這一點,我需要手動將pts_n添加到models.py並遷移到數據庫。有更好的解決方案嗎?我唯一能想到的是分批預先填入pts_n,以避免每次添加新廣告系列時進行遷移。

我在想這個錯誤的方式嗎?我對此很新。

回答

1

最簡單的方法是創建一個UserPoints模型,你的記錄點的授牌。

class UserPoints(models.Model): 
    user = models.ForeignKey('auth.User', on_delete=models.CASCADE) 
    date = models.DateTimeField(auto_now_add=True) 
    points_amount = models.IntegerField(default=1) 
    points_category = models.CharField(max_length=50, blank=True, null=True) 

此模型假定該類別是可選的。

現在,您可以動態地計算用戶的積分:

user = request.user 
UserPoints.objects.filter(user=user).aggregate(Sum('points_amount')) 

如果你想只是從某一類點的數量:

category = 'my_category'  
UserPoints.objects.filter(user=user, category=category).aggregate(Sum('points_amount')) 

你的解決方案,你會不斷地添加pts_n列到數據庫顯然不是可取的,因爲這將是很多工作,並且您將使用total_points列作爲其他列的聚合,這不是推薦的做法。