在Django模型中设置超类属性

时间:2015-12-17 00:06:33

标签: python django inheritance django-models

如果我有django模型,例如:

from django.db import models

class Super(models.Model):
    field_a = models.IntegerField()
    field_b = models.DateTimeField()

另一个扩展它的模型:

class Sub(Super):
    pass

那么如何设置field_afield_b的固定值作为构建Sub实例的一部分? 比如说,我想将field_a设置为123,将field_b设置为datetime.now(),作为Sub构造函数的一部分。

对于它的价值,我有一个Java背景,基本上我正在寻找的是python / django相当于:

public class Super
{
    int fieldA;
    long fieldB;

    public Super(int a, long b)
    {
        this.fieldA = a;
        this.fieldB = b;
    }
}

public class Sub extends Super
{
    public Sub()
    {
        super(123, System.currentmillis());
    }
}

1 个答案:

答案 0 :(得分:0)

不要将Java与Python混合 - 这不是Python的工作方式!

  • Python中没有 this - 您应该将其作为第一个参数传递给方法(此参数的标准命名为 self
  • 没有类似Java的构造函数 - 而不是这个 __ init __ 方法

您的问题的一般示例是:

    class Sup:
        field = "default one"
        def __init__(self, value=None):
            if value != None:
                self.field = value

    class Sub(Sup):
        def __init__(self, value=None):
            if value != None:
                Sup.__init__(self, value)

    default = Sub()
    print default.field

    modified = Sub("modified one")
    print modified.field

您还可以在继承课程中调用超级 - read more here

另外请注意你的qestion与Django没什么共同之处 - 如果我是你,我会在创建Django项目之前先用一些好的Python教程