I've run into a django error that's got tearing out my hair. Background: I have a set of models inheriting from each other, and I'm trying to build a set of forms with a parallel structure.
Here's the base type for an object creation form:
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
Here's an inherited form type:
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
I call the inherited type from a view script:
form = NewAnalysisForm(request.POST, request.FILES)
new_analysis = form.save(
status = 'X',
object_type = 'Batch',
batch_type = 'temp',
)
And it throws this error:
save() takes at most 2 non-keyword arguments (4 given)
If I change the "super" line to this:
batch = super(CreateSharedObjectForm,self).save( status, object_type, commit=False, *args, **kwargs )
I get this error:
Exception Type: IntegrityError
Exception Value: null value in column "parent_project_id" violates not-null constraint
Even wierder, django's trace output gives me this:
Checkpoint A
Checkpoint B
Before returning a HTTP 500 error.
As far as I can tell, the super line in the save method in NewBatchForm is never calling CreateSharedObjectForm. I'm aware that the super method can be tricky, but this is just single inheritance, and I can't figure out why the method for the superclass never gets called.
What's going on here? How do I fix it?