簡體   English   中英

從Django模型方法訪問類變量

[英]access class variable from django model method

我有以下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它將作為日期字段類型而不是實際值。

但是,如果我使用自我,那么它的工作原理如下:

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 ,因此需要將值傳遞給方法

更新代碼

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

首先,如果您正在使用python 2,則需要傳遞帶有參數的self實例變量。 在python 3中,我們不需要顯式傳遞self實例。 您可以通過在同一方法和內部方法中傳遞兩個參數來做到這一點,只需要檢查條件就是self引用member_dob或ifeel_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  ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM