基于计算的模型过滤

时间:2012-11-10 17:06:05

标签: 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_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)))

访问value plan__interval时遇到问题。如果我尝试在这个地方使用常数值,例如10,那么一切都正常。

您是否有任何建议如何在过滤器计算中使用plan.interval值?

3 个答案:

答案 0 :(得分:1)

您可能对此感兴趣: Filtering with calculations on fields

我仍有疑问,因为在向DATETIME添加INTEGER时很难保持一致,因此您可以向DatetimeField添加另一个Subscription,并根据{{}填充此值和结束日期{1}} ForeignKey,例如订阅的plan方法。

答案 1 :(得分:1)

Raunak Agarwal的回答看起来不错,但试试这个:

valid = Subscription.objects.filter(active_from_date_ gte = datetime.date.today() - F('plan _interval'))

答案 2 :(得分:0)

我猜你可以使用注释函数在过滤器中使用外键

valid = Subscription.objects.annotate(plan_interval = Sum('plan__interval')).filter(valid_from_date__gte=(datetime.date.today()-timedelta(days=plan_interval)))