三种型号:
- 用户
- 会员资格
- 购买会员
应用程序如何工作
每个成员都有开始日期和结束日期。用户可以购买存储在 PurchasedMemebership 模型中的会员资格及其信息。
当会员日期到期(结束日期大于当前日期)时,计算每个会员并将计数值存储到 total_membership(PurchasedMemebership 模型字段)。
我有 3 个有问题的解决方案
- 像会员结束日期一样手动执行调用 perform_Calculations(request) 函数。(手动执行)
- 增加用户购买会员时提交的total_membership。将出现竞态条件。
- 当用户购买会员资格或查看会员资格时,检查结束日期并执行计算,但问题是每次用户在结束日期后查看会员资格时,都会执行额外检查(if-else)。
我想要的是
- 没有性能问题。
- 解决此问题的最佳方法。
- 如何处理比赛条件?
- 如何安排任务?
- 任何没有稳定性问题的 django 包?
- 我的哪个解决方案是好的,它怎么可能?
Django 模型
用户模型存储用户信息。
class User(models.Model):
#Django User Model
此模型存储会员详细信息。
class Membership(models.Model):
title = models.CharField(max_length=100)
start_date = models.DateTimeField(auto_now_add=True)
end_date= models.BooleanField(default=None)
total_membership = models.IntegerField(default=0)
price = models.IntegerField(default=0)
PurchasedMembership = models.ManyToManyField(settings.AUTH_USER_MODEL,through='PurchasedMembership',through_fields=('Membership ', 'user'))
此模型存储已购买的会员资格详细信息。
class PurchasedMembership(models.Model):
Membership = models.ForeignKey(Membership,on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, default="")
joined_date = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = ('Membership ', 'user',)
将调用此方法来执行一些计算并将它们保存到数据库中。
def perform_Calculations(request):
#Performing calculations