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)))

値 plan__interval へのアクセスに問題があります。この場所で定数値 (たとえば 10) を使用しようとすると、すべてが正常に機能します。

フィルター計算で plan.interval 値を使用する方法について何か提案はありますか?

4

3 に答える 3

1

Raunak Agarwalの答えはいいようですが、これを試してください:

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

于 2012-11-15T11:04:11.760 に答える
1

あなたはこれに興味があるかもしれません: フィールドの計算によるフィルタリング

INTEGER を DATETIME に追加するときに一貫性を保つのは難しいため、私はまだ疑問を持っています。たとえば、Subscriptionの方法で、別の値を追加して、ForeignKeyに従ってこの値に終了日を入力することができDatetimeFieldます。Subscriptionplansave(self, *args, **kwargs)

于 2012-11-10T17:14:37.153 に答える
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 に答える