我有一个Django类将模型中的出生日期(dob)字段转换为年龄,并将结果注释为查询集
class CalculateAge(Case):
def __init__(self, model, field, condition=None, then=None, **lookups):
today = date.today()
obj = model.objects.first()
field_object = model._meta.get_field(field)
field_value = field_object.value_from_object(obj)
bornyear = field_value.year
bornmonth = field_value.month
bornday = field_value.day
# something is wrong with the next two lines
age = [today.year - bornyear - ((today.month, today.day) < (bornmonth, bornday))]
return super().__init__(*age, output_field=IntegerField())
但是,当我尝试将结果传递给查询集时
queryset = Person.objects.all().annotate(age=CalculateAge(Person, 'dob')
我得到了错误
Positional arguments must all be When objects.
我怎样才能让它工作
有一个更简单的方法。只需在模型上添加一个函数,即可获得如下年龄:
相关问题 更多 >
编程相关推荐