Django中的ProgrammingError:对象没有属性,即使属性在对象

时间:2017-10-27 08:56:51

标签: python django

我在Django工作,并且有一个模型需要包含字段“age”(见下文)

class Result(models.Model):

    group = models.ForeignKey(Group, null=True)    
    lifter = models.ForeignKey("Lifter", null=True)    
    body_weight = models.FloatField(verbose_name='Kroppsvekt', null=True)
    age_group = models.CharField(max_length=20, verbose_name='Kategori', 
    choices=AgeGroup.choices(), null=True)
    weight_class = models.CharField(max_length=10, verbose_name='Vektklasse', 
    null=True)
    age = calculate_age(lifter.birth_date)
    total_lift = models.IntegerField(verbose_name='Total poeng',
                                 blank=True, null=True) 

年龄是使用utils.py中的方法计算的,名为“calculate_age”:

def calculate_age(born):
    today = date.today()
    return today.year - born.year((today.month, today.day 
    < (born.month,born.day))

传递给calculate_age方法的lifter.birth_date来自此模型(与结果模型属于同一类)

class Lifter(Person):

    birth_date = models.DateField(verbose_name='Fødselsdato', null=True)
    gender = models.CharField(max_length=10, verbose_name='Kjønn', 
    choices=Gender.choices(), null=True)

但是,我收到错误'ForeignKey'对象没有属性“birth_date”。我试过调整代码来摆脱它,但似乎没有任何工作。

有谁知道为什么我会收到此错误?

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

你不能初始化这样的字段,你试图通过在声明它之前访问类实例的值来初始化它。

根据您的使用情况判断,您可以将其设为属性

变化

age = calculate_age(lifter.birth_date)

@property
def age(self):
    return calculate_age(self.lifter.birth_date)