Django 基于计算的模型滤波
我在从模型中获取某些特定对象时遇到一些问题 我的模型看起来像:Django 基于计算的模型滤波,django,django-models,django-views,Django,Django Models,Django Views,我在从模型中获取某些特定对象时遇到一些问题 我的模型看起来像: class Subscription(models.Model): subscriber = models.ForeignKey(Subscriber, null=False, blank=False, default=None, editable=False) plan = models.ForeignKey(SubscriptionPlan, null=False, blank=False) active
class Subscription(models.Model):
subscriber = models.ForeignKey(Subscriber, null=False, blank=False, default=None, editable=False)
plan = models.ForeignKey(SubscriptionPlan, null=False, blank=False)
active_from_date =models.DateField(null=False, blank=False)
class SubscriptionPlan(models.Model):
name = models.CharField(max_length=50, null=False, blank=False, default=None)
interval = models.PositiveIntegerField(null=False, blank=False, default=30)
现在我只想获得这些有效的订阅,所以我尝试以下方法:
valid = Subscription.objects.filter(valid_from_date__gte=(datetime.date.today()-timedelta(days=plan__interval)))
我无法访问价值计划间隔。如果我尝试在这里使用常量值,例如10,那么一切都正常工作
您对如何在筛选计算中使用plan.interval值有什么建议吗?您可能对此感兴趣:
我仍然有疑问,因为向DATETIMEs添加整数时很难保持一致,因此您可以向订阅添加另一个
DatetimeField
,并根据plan
ForeignKey在save(self,*args,**kwargs)中使用结束日期填充此值
例如订阅方法。我想您可以使用注释功能在过滤器中使用外键
valid = Subscription.objects.annotate(plan_interval = Sum('plan__interval')).filter(valid_from_date__gte=(datetime.date.today()-timedelta(days=plan_interval)))
Raunak Agarwal的回答似乎不错,但请尝试以下方法:
valid=Subscription.objects.filter(active_from_date_gte=datetime.date.today()-F('plan_interval'))是否生成错误?我遇到运行时错误:“未定义全局名称‘plan_interval’”。在我的情况下,如果没有设置计划,则无法进行订阅。在这种情况下,我仍然会得到错误:“全局名称‘计划间隔’未定义”原谅我,我看错了问题。我已经更新了我的答案。请注意,不幸的是,我仍然收到错误“未定义全局名称“plan_interval”。你对我如何解决这个问题有什么建议吗?我知道我可以添加新的字段,但从我的观点来看,这是多余的数据。这种方法还可能使其他场景复杂化,例如将计划更改为订阅。