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

Setting attributes in constructor for Django model

我有一个抽象的 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 模型的动态初始化吗?

您已经可以使用

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

所以我认为您的 __init__ 方法没有必要。

您可能还会发现有用的 Model.objects.create() 方法来创建新的 Django 模型实例:

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

如果有一些自动生成的字段(例如,带有 auto_now_add=True 选项的 ID 或日期)— 如果您使用 Model.objects.create(),您将在 instance 中获得它们的值].