我有一个抽象的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模型实现这种动态初始化的其他方法吗?
答案 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()
中获取其值}。