0

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?

1 Answer 1

1

are you sure you don't want super(NewBatchForm, self).save inside NewBatchForm?

(you have super(CreateSharedObjectForm, self)

Sign up to request clarification or add additional context in comments.

2 Comments

I tried it and it throws: save() got multiple values for keyword argument 'commit'
Thanks for a good, quick answer. I can't believe I missed that myself.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.