有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)
答案 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()
后对其进行呼叫