从django模型方法访问类变量

时间:2017-08-17 11:52:36

标签: python django django-models

我有以下Django models.py

class members(models.Model):

    def calculate_age(dob):
         return int((datetime.date.today() - dob).days / 365.25  )

    auto_id = models.AutoField(primary_key=True)
    member_name = models.CharField(max_length=25, blank=False, default='')
    member_dob = models.DateField(blank=True)
    wife_name = models.CharField(max_length=25, blank=False, default='')
    wife_dob = models.DateField(blank=True)
    member_age = property(calculate_age(member_dob))
    wife_age = property(calculate_age(wife_dob))

现在来自calculate_age如果我通过member_dob它将作为日期字段类型而不是实际值。

但如果我使用self,那么它可以正常工作,

class members(models.Model):

   def calculate_age(self):
        return int((datetime.date.today() - self.member_dob).days / 365.25  )

    def calculate_age_wife(self):
        return int((datetime.date.today() - self.wife_dob).days / 365.25  )

    auto_id = models.AutoField(primary_key=True)
    member_name = models.CharField(max_length=25, blank=False, default='')
    member_dob = models.DateField(blank=True)
    wife_name = models.CharField(max_length=25, blank=False, default='')
    wife_dob = models.DateField(blank=True)
    member_age = property(calculate_age)
    wife_age = property(calculate_age_wife)

现在问题是,我需要为多个项调用此calculate_age,因此需要将值传递给方法

2 个答案:

答案 0 :(得分:1)

更新代码

class members(models.Model):

   def calculate_age(self):
       if self.member_dob:
           return int((datetime.date.today() - self.member_dob).days / 365.25  )
       elif self.wife_dob:
           return int((datetime.date.today() - self.wife_dob).days / 365.25)
       else:
           return None

答案 1 :(得分:0)

首先,如果您正在使用python 2,则需要使用参数传递self实例变量。在python 3中,我们不需要显式传递自我实例。你可以这样做我在同一个方法中传递两个参数而内部方法只需要一个检查条件就是self引用member_dob或wife_dob

 def calculate_age(self):
        if self.member_dob:
         return int((datetime.date.today()-self.member_dob).days/365.25) 
        else:
         return int((datetime.date.today()-self.wife_dob).days/365.25  )