この「疑似コード」を実装するフィルターを適用したいと思います。
Post.objects.filter(Post.timestamp + Post.duration > datetime.datetime.now())
また、これを Django 管理コマンドにラップしたいと思います。
どんな助けでも素晴らしいでしょう!
この「疑似コード」を実装するフィルターを適用したいと思います。
Post.objects.filter(Post.timestamp + Post.duration > datetime.datetime.now())
また、これを Django 管理コマンドにラップしたいと思います。
どんな助けでも素晴らしいでしょう!
フィールドがどのように見えるかわかりませんが、ヒントは次のとおりです。
このような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/