【发布时间】:2017-08-17 20:41:08
【问题描述】:
我有以下 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,因此需要将值传递给方法
【问题讨论】:
-
为什么要传递 dob,当您使用 self 时,member 的所有项目都可以访问该方法以及属性(即您的 member_dob)
-
我已经更新了我的问题,您可以看到有效的问题(即第二个代码),但我只想使用一种方法
-
哦,现在我明白了。但是您的第一种方法将不起作用,因为您正在传递类属性 (member_dob),因为在您拥有成员实例之前,member_dob 只是一种 models.DateField 并且还没有任何值。当这里的功能相同时,拥有一个函数很好,但唯一的另一种方法是创建第三个函数,例如计算年龄(dob),它实际上计算年龄,并从您的其他 2 个函数中为成员和他的妻子创建一个,你必须调用calculate_age(self.member_dob) 和calculate_age(self.wife_dob)。
-
在其实例上调用该函数将正常工作。我想你还没有尝试过。
-
而且由于你的功能只是一个班轮,你还不如按照第二种方法!
标签: python django django-models