首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django-models中创建点子集

在django-models中创建点子集
EN

Stack Overflow用户
提问于 2016-09-17 07:58:28
回答 1查看 174关注 0票数 0

我正在寻找一种可扩展的方法来创建新的用户点子集,而不需要每次创建新的子集时都进行迁移。

例如,假设我有一个users应用程序,其中total_points是每个用户的pts_1pts_2pts_3的总和。

我还创建了一个campaigns应用程序,使用户能够通过执行操作(例如,为了简单起见,单击一个按钮)来获得积分。我可以通过Django管理员向平台添加新的活动,并对其进行设置,这样当用户完成活动时,他们就会获得积分,这样(campaign, pk=n)就可以给该用户的pts_n积分。

但是,为了做到这一点,我需要向models.py手动添加pts_n并迁移到数据库。有没有更好的解决方案?我唯一能想到的就是批量预填充pts_n,以避免每次添加新活动时都进行迁移。

我是不是想错了?我对此还很陌生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-17 11:55:16

最简单的解决方案是创建一个UserPoints模型,在该模型中记录积分的授予。

代码语言:javascript
复制
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)

此模型假设类别是可选的。

现在,您可以动态计算用户的点数:

代码语言:javascript
复制
user = request.user
UserPoints.objects.filter(user=user).aggregate(Sum('points_amount'))

如果您只想要某个类别的点数:

代码语言:javascript
复制
category = 'my_category'    
UserPoints.objects.filter(user=user, category=category).aggregate(Sum('points_amount'))

在这里,不断向数据库添加pts_n列的解决方案显然不可取,因为这将是大量的工作,并且您将使用total_points列作为其他列的聚合,这不是推荐的做法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39541554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档