0
我碰到一个django错误,它已经撕掉了我的头发。背景:我有一组模型彼此继承,我试图构建一组具有并行结构的表单。django模型继承
下面是一个对象创建形式的基本类型:
class CreateSharedObjectForm(ModelForm):
def save(self, status, object_type, commit=True, *args, **kwargs):
print "*********Got here!!!**************"
shared_object = super(ModelForm,self).save(commit=False, *args, **kwargs)
shared_object.status = status
shared_object.object_type = object_type
if commit:
shared_object.save()
return shared_object
下面是一种遗传形式类型:
class NewBatchForm(CreateSharedObjectForm):
def save(self, status, object_type, batch_options, commit=True, *args, **kwargs):
print "Checkpoint A"
batch = super(CreateSharedObjectForm,self).save(status, object_type, commit=False, *args, **kwargs)
print "Checkpoint B"
if commit:
batch.save(*args, **kwargs)
return analysis
class Meta:
model = batch
我请从视图脚本继承的类型:
form = NewAnalysisForm(request.POST, request.FILES)
new_analysis = form.save(
status = 'X',
object_type = 'Batch',
batch_type = 'temp',
)
它会抛出此错误:
save() takes at most 2 non-keyword arguments (4 given)
如果我改变了 “超级” 行这样的:
batch = super(CreateSharedObjectForm,self).save(status, object_type, commit=False, *args, **kwargs)
我得到这个错误:
Exception Type: IntegrityError
Exception Value: null value in column "parent_project_id" violates not-null constraint
即使wierder,Django的跟踪输出给了我这样的:
Checkpoint A
Checkpoint B
在返回HTTP 500错误之前。
据我所知,NewBatchForm中save方法中的超级行从不调用CreateSharedObjectForm。我知道super method can be tricky,但这只是单一的继承,我不知道为什么超类从未调用的方法。
这是怎么回事?我如何解决它?
我尝试过了,它抛出:保存()有多个值的关键字参数“提交” – Abe
感谢好了,快回答我无法相信我错过了我自己。 – Abe