在Django模型的构造函数中设置属性

时间:2015-09-11 19:21:42

标签: django python-3.x django-models django-1.8

我有一个抽象的BaseModel,许多模型将继承从构造函数初始化属性值的行为:

class BaseModel(models.Model):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for key in kwargs:
            setattr(self, key, kwargs[key])

    class Meta:
        abstract = True

然后,我尝试初始化它的一个特化:

BaseModelSon(attr1=val1, attr2=val2, ...)

这是一个好习惯吗?你知道为Django模型实现这种动态初始化的其他方法吗?

2 个答案:

答案 0 :(得分:3)

您已经可以使用

创建常规Django模型实例
MyModel(field1='value1', field2='value2')

所以我不认为你的__init__方法是必要的。

答案 1 :(得分:2)

此外,您可能会为新的Django模型实例创建找到有用的Model.objects.create()方法:

instance = MyModel.objects.create(field1='value1', field2='value2'...)

如果有一些自动生成的字段(例如,ID或某个日期带有auto_now_add=True选项) - 如果您使用instance,则会在Model.objects.create()中获取其值}。