Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 基于计算的模型滤波_Django_Django Models_Django Views - Fatal编程技术网

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”。你对我如何解决这个问题有什么建议吗?我知道我可以添加新的字段,但从我的观点来看,这是多余的数据。这种方法还可能使其他场景复杂化,例如将计划更改为订阅。