我正在寻找一种可扩展的方式来创建新的用户点子集,而不必在每次创建新子集时都进行迁移。
例如,假设我有一个users
应用程序有一个模型,其中total_points
是的总和pts_1
,pts_2
以及pts_3
为每个用户。
我还创建了一个campaigns
应用程序,使用户可以通过执行操作(例如,单击按钮以简化操作)来赚取积分。我可以通过Django管理员将新的广告系列添加到平台中,并进行设置,以便用户完成广告系列时获得相应的积分,从而(campaign, pk=n)
将该用户的积分归功于pts_n
。
但是,为此,我需要手动添加pts_n
到models.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] 删除。
我来说两句