Django将出生日期模型字段转换为年龄

2024-05-03 04:02:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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.

我怎样才能让它工作


Tags: noneobjfieldagetodaymodelobjectsobject
1条回答
网友
1楼 · 发布于 2024-05-03 04:02:14

有一个更简单的方法。只需在模型上添加一个函数,即可获得如下年龄:

class ModelName(models.Model):
    birth_date = models.DateField()
    #other fields

    def get_age(self):
        age = datetime.date.today()-self.birth_date
        return int((age).days/365.25)

相关问题 更多 >