0

日付と年を表す整数の組み合わせでフィルターを使用してリクエストを試みましたが、問題が発生しました。

ここに私のモデルがあります:

class Exemple(models.Model):
    date_field = models.DateField()
    year_field = models.IntegerField()

これが機能するリクエストです:

exs = Exemple.objects.extra(where=["DATE(date_field, '+' || year_field|| ' years') < DATE('now') OR date_field is NULL"])

django ORMのみを使用してまったく同じリクエストを行いたいのですが、これを試しました(うまくいきませんでした)

from django.db.models import F
import datetime
exs = Exemple.objects.filter(date_field__lt=datetime.timedelta(days=-365*F('year_field'))+datetime.datetime.today().year)

問題は、 timedelta が呼び出された時点で F() がまだ値ではないことだと思います

解決策、または役立つ可能性のあるアイデアを事前に感謝します

4

1 に答える 1

0

それがまさに問題です。ORM だけでは、そのような複雑な計算を行うことはできません。ただし、__yearルックアップを利用して計算を簡素化できる場合があります。

Exemple.objects.filter(date_field__year__lt=F('year_field'))

ただし、それよりも複雑な場合は、 を使用する必要がありますextra

于 2012-06-07T17:37:48.160 に答える