在django中为模型定义另一个变量时使用变量

时间:2017-05-22 21:38:09

标签: python django

基本上我想做的是:

class A(models.Model):
    a_number = models.FloatField()


class B(models.Model):
    a = models.ForeignKey(A)
    b = models.FloatField(default=self.a.a_number)

我知道在定义变量时我不能使用self,但是有一个解决方法吗?如果'a_number'是方法而不是变量怎么办?

我知道我可以在B中制作这样的方法:

def b(self):
    return self.a.a_number

但是当我在B中创建对象时,我需要获得'a_number'的值,所以这不起作用。

1 个答案:

答案 0 :(得分:0)

实施clean() method以设置b的默认值。

class B(models.Model):
    a = models.ForeignKey(A)
    b = models.FloatField()

    def clean(self):
        if self.b is None:
            self.b = self.a.a_number

上面链接的Django文档建议clean()作为自动为字段提供值的方法:

  

Model.clean()

     

此方法应用于提供自定义模型验证,以及   如果需要,修改模型上的属性。例如,你可以   用它来自动为字段提供值,或者做   验证需要访问多个字段:

(example omitted)

在模型上调用clean()之前,请务必致电save()。如果您使用Django管理站点,则在该站点上创建或更新对象时会自动调用clean()