我从模型中获取一些特定对象时遇到了一些问题。
我的模特看起来像:
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值?
答案 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)))