我是Django的新手。请帮我解决这个问题
这就是我要在其上编写查询的模型
class ReservationFrame(models.Model):
id = models.AutoField(primary_key=True)
start_at = models.DateTimeField(db_index=True)
information = models.JSONField(default=dict)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
json字段(ReservationFrame.information)的格式如下
{
upper_age_limit: 22,
lower_age_limit: 30
}
我想计算登录用户的年龄,直到ReservationFrame.start\u在,如果较低的\u年龄\u限制<;=user.age<;=年龄上限
我用来计算年龄的公式是
start_at.year - born.year - ((start_at.month, start_at.day) < (born.month, born.day))
我正在使用annotate,但出现了错误
person_birthday = request.user.person.birthday
frames_without_age_limit = reservation_frames.exclude(Q(information__has_key = 'upper_age_limit')&Q(information__has_key = 'lower_age_limit'))
reservation_frames = reservation_frames.annotate(
age=ExtractYear('start_at') - person_birthday.year - Case(When((ExtractMonth('start_at'), ExtractDay('start_at')) < (person_birthday.month, person_birthday.day), then=1), default=0))
reservation_frames = reservation_frames.filter(
Q(information__lower_age_limit__lte = F('age'))|
Q(information__lower_age_limit=None)
)
reservation_frames = reservation_frames.filter(
Q(information__upper_age_limit__gte = F('age'))|
Q(information__upper_age_limit=None)
)
TypeError: '<' not supported between instances of 'ExtractMonth' and 'int'
关系运算符,如<><;=>;=,==在Django conditional expressions中不允许使用。 因此,您应该使用查询集和链条件来实现您的逻辑。 此外,您还可以将词汇比较更改为更简单的逻辑比较。 像这样:
像这样试试。它应该有用
相关问题 更多 >
编程相关推荐