在Django模型中创建点子集

瓦拉施

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

例如,假设我有一个users应用程序有一个模型,其中total_points是的总和pts_1pts_2以及pts_3为每个用户。

我还创建了一个campaigns应用程序,使用户可以通过执行操作(例如,单击按钮以简化操作)来赚取积分。我可以通过Django管理员将新的广告系列添加到平台中,并进行设置,以便用户完成广告系列时获得相应的积分,从而(campaign, pk=n)将该用户的积分归功于pts_n

但是,为此,我需要手动添加pts_nmodels.py数据库并迁移到数据库。有更好的解决方案吗?我唯一想到的就是pts_n分批预先填充,以避免每次添加新的广告系列时都会迁移。

我在想这个错误的方式吗?我对此很陌生。

伏都教汉堡

最简单的解决方案是创建一个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列与其他列的集合一起使用,因此不建议这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章