3

この「疑似コード」を実装するフィルターを適用したいと思います。

   Post.objects.filter(Post.timestamp + Post.duration > datetime.datetime.now())

また、これを Django 管理コマンドにラップしたいと思います。

どんな助けでも素晴らしいでしょう!

4

1 に答える 1

6

フィルター

フィールドがどのように見えるかわかりませんが、ヒントは次のとおりです。

このようなF 式F('timestamp') - F('duration')を作成し、クエリに注釈を付けましょう。

from django.db.models import DateTimeField, ExpressionWrapper, F

Post.objects.annotate(
        timestamp_minus_duration=ExpressionWrapper(
            F('timestamp') + F('duration'),
            output_field=DateTimeField()
        )
    )

その注釈付きフィールドでフィルタリングできるようになりました

   Post.objects.annotate(
        timestamp_minus_duration=ExpressionWrapper(
            F('timestamp') + F('duration'),
            output_field=DateTimeField()
        )
    ).filter(
        timestamp_minus_duration__gt=datetime.datetime.now()
    )

参照: https://docs.djangoproject.com/en/1.9/topics/db/queries/#using-f-expressions-in-filters

参照: https://docs.djangoproject.com/es/1.9/ref/models/expressions/#using-f-with-annotations

参照: https://docs.djangoproject.com/es/1.9/topics/db/aggregation/#filtering-on-annotations

管理コマンド

handle()コマンドのメソッドにコードを入れるだけです

# yourapp/management/commands/deletepost.py

from django.core.management.base import BaseCommand, CommandError
from yourapp.models import Post

class Command(BaseCommand):
    help = 'Describe your cmd here'

    def handle(self, *args, **options):
           Post.objects.annotate(...).filter(...).delete()

詳細: https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/

于 2016-02-26T18:01:32.960 に答える