Django成员资格(选择30、90、180天)及其逻辑

时间:2019-05-24 17:16:17

标签: python django

有3种会员资格选择,分别是3个和6个月。我已经写了1个月的书,但是写逻辑取决于选择的问题。

它在1个月内运作良好,但是:

membership_choices =(

            ('1', '1 month'),
            ('3', '3 months'),
            ('6', 'half an year'),

类成员(models.Model):

client = models.ForeignKey(Client, on_delete=models.CASCADE)
types = models.CharField(max_length=1, choices=membership_choices)
end = models.DateTimeField(default=datetime.today()+timedelta(days=30))

问题是要在此模型中编写如下内容:

如果类型== 3:

  datetime.today() + timedelta(days=90)

elif类型== 6:

  datetime.today() + timedelta(days=180)

2 个答案:

答案 0 :(得分:0)

首先,您可以将end字段设置为默认null。
并且您可以重写save()方法,以确保将基于types字段填充该方法。

def save(self, *args, **kwargs):
    if not self.end:
        self.end = datetime.today() + timedelta(days=self.types * 30)
    super().save(*args, **kwargs)

答案 1 :(得分:0)

有很多不同的方法可以解决这个问题。我认为最好的方法是创建一个在模型内设置结束点的方法,因为您很可能也需要它来进行更新:

class Membership(models.Models):
    # your fields here

    def set_expiration(self):
        days = {
            # you can normalize this to use from your choices, just an example
            '1': 30,
            '3': 90,
            '6': 180
        }
        self.end = timezone.localdate() + timedelta(days=days.pop(self.type))
        self.save()

因此,在用于创建成员资格的视图中,您只需在创建或续订instance.set_expiration()后对其进行呼叫