gpt4 book ai didi

python - 如何在 Django 中使用表达式进行过滤

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:11 25 4
gpt4 key购买 nike

我想要实现这个“伪代码”的过滤器:

   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/

关于python - 如何在 Django 中使用表达式进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35658588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com