我有两个模特,主题和访问。我正在尝试选择月份年龄超过一定数量的访问次数,但不能简单地过滤age_months,因为它不是字段,而是与访问模型相关联的计算值。
我们从一个表单中获取age_months然后尝试将其转换为日期(主题生日日期加上转换为timedelta的月份的年龄)然后在我们的视图中使用F-filtering来选择visit_date更大的访问次数比这个计算的主题年龄
以下是代码:
vform = VisSearchForm(request.POST,prefix='v')
if vform.is_valid():
e = vform.cleaned_data
vresults = Visit.objects.all()
if e['age_months']:
vresults.filter(visit_date__gt=F('subject__birthdate') + timedelta(days=30.44*e['age_months']))
birthdate字段连接到主题模型,而不是访问模型,visit_date连接到访问模型。
当我打印timedelta部分时,我得到一个值,但是当我打印 F('subject__birthdate')+ timedelta(天= 30.44 * e ['age_months'])
我得到了
(+: (DEFAULT: ), 700 days, 2:52:48)
当我想要的是F('subject__birthdate')返回日期而不是(+ :(默认值:))
答案 0 :(得分:1)
不会。 F
对象是对数据库字段的引用,并且在数据库查询的上下文之外绝对没有任何含义。
即使构建了查询,它仍然是对另一个数据库字段的引用,并且不包含实际值。