gpt4 book ai didi

python - 在 Django 中查找同一天发生的事件

转载 作者:行者123 更新时间:2023-11-28 18:35:16 25 4
gpt4 key购买 nike

我有一个 Person 模型,人们可以有工作:

class Person(models.Model):
name = TextField()
birth_date = DateField()

class Job(models.Model):
name = TextField()
start_date = DateField()
person = ForeignKey('Person')

我想找到在生日那天开始工作的人。

现在,如果我想找到在他们确切生日那天开始工作的人,我会使用:

from django.db.models import F
Person.objects.filter(birth_date=F('job__start_date'))

但这不会返回任何人,因为没有人在他们出生时就被分配了一份工作(希望如此)。

我可以找到所有在 4 月 1 日开始工作的人:

Person.objects.filter(birth_date__month=4, birth_date__day=1)

但是,如果我尝试结合这个找到在生日月份开始工作的人:

from django.db.models import F
Person.objects.filter(birth_date__month=F('job__start_date__month'))

我得到:

FieldError at /data/explorer/
Cannot resolve keyword u'month' into field. Join on 'start_date' not permitted

我如何找到在生日那天开始工作的人?

最佳答案

Django 目前不支持在 F 表达式中查找日期(时间)字段。仍然有办法,尽管它可能很老套。

from django.db import connection
from django.db.models import F

start_month = connection.ops.date_extract_sql('month', '%s.start_date' % Job._meta.db_table)
start_day = connection.ops.date_extract_sql('day', '%s.start_date' % Job._meta.db_table)
birth_month = connection.ops.date_extract_sql('month', 'birth_date')
birth_day = connection.ops.date_extract_sql('day', 'birth_date')

# to trigger the join and make the job table available
# otherwise the next query will fail (there's probably a less hacky way to do this)
persons = Person.objects.filter(job=F('job__pk'))

persons.extra(
{
'start_month': start_month,
'start_day': start_day,
'birth_month': birth_month,
'birth_day': birth_day
},
where=['start_day=birth_day AND start_month=birth_month']
)

关于python - 在 Django 中查找同一天发生的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33140052/

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