在 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
中获得它们的值].
我有一个抽象的 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
中获得它们的值].