Django抽象模型继承-使所有字段都可以为空
我有一个Django抽象模型继承-使所有字段都可以为空,django,python-3.x,django-models,Django,Python 3.x,Django Models,我有一个AbstractModel,Model和DraftModel 我需要DraftModel从AbstractModel继承,但是所有inherited字段都应该是null=True。我不能将Model字段更改为null=True,因为有太多的逻辑建立在这个基础上 我不希望手动覆盖所有字段 我试过: def __init__(self,*args,**kwargs): super().__init__(*args,**kwargs) for field in self
AbstractModel
,Model
和DraftModel
我需要DraftModel
从AbstractModel
继承,但是所有inherited
字段都应该是null=True
。我不能将Model
字段更改为null=True
,因为有太多的逻辑建立在这个基础上
我不希望手动覆盖所有字段
我试过:
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for field in self._meta.fields:
field.null = True
这不管用,你知道吗
编辑
我想出了一个解决方案(检查我的答案),但您可以添加您的解决方案。更改
\uuuu init\uuuuu
中的字段无效,因为没有呼叫
在DrafModel
下添加此代码段可以:
for field in DraftModel._meta.fields:
field.null = True
当然,您应该排除像PrimaryKey
或BooleanField
编辑
就我而言,这是可行的:
for field in DraftModel._meta.fields:
if not field.primary_key and not isinstance(field, models.BooleanField):
field.null = True
您可以覆盖
\uuuu调用\uuuu
方法:
class DraftModel(SomeAbstractModel):
def __call__(self, *args, **kwargs):
for f in self.__class__._meta.fields:
if f.name not in ['id'] and not isinstance(f, models.BooleanField): # copy pasted from your answer
f.null = True
super(DraftModel, self).__call__(*args, **kwargs)