2

从我的模型中获取一些特定对象时我遇到了一些问题。

我的模型看起来像:

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 值有什么建议吗?

4

3 回答 3

1

您可能对此感兴趣: 使用字段计算进行过滤

我仍然有疑问,因为在将 INTEGER 添加到 DATETIME 时很难保持一致,因此您可以添加另一个DatetimeFieldSubscription根据planForeignKey使用结束日期填充此值,save(self, *args, **kwargs)例如在 Subscription 方法中。

于 2012-11-10T17:14:37.153 回答
1

Raunak Agarwal 的回答似乎不错,但试试这个:

有效 = Subscription.objects.filter(active_from_date_gte = datetime.date.today() - F('plan _interval'))

于 2012-11-15T11:04:11.760 回答
0

我想您可以使用注释功能在过滤器中使用外键

valid = Subscription.objects.annotate(plan_interval = Sum('plan__interval')).filter(valid_from_date__gte=(datetime.date.today()-timedelta(days=plan_interval)))
于 2012-11-10T21:46:41.647 回答