0

Hi I have just read through, http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/, and am trying to apply it to my own django app.

I have created a view which lets me use a single form to create and store 2 objects that are related to each other

I am getting a post error but can't seem to find what is causing it.

After clicking add a blank white page is shown along with the error message below, which is in red in the terminal.

'[28/May/2014 02:57:25] "POST /members HTTP/1.1" 405 0'

Models

class MemberRole(models.Model,get_fields):
    name = models.CharField(max_length = 20)

    def __unicode__(self): 
        return self.name

class Member(models.Model,get_fields):
    first_name = models.CharField(max_length = 20)
    role = models.ForeignKey(MemberRole, null = True, blank = True)

Forms

class MemberForm(forms.ModelForm):
    class Meta:
        model = Member
        exclude = ('role',)

class MemberRoleForm(forms.ModelForm):
    class Meta:
        model = MemberRole

View fucntion

def add_member(request):

model_url = 'member-list'

if request.method == "POST":
    rform = MemberRoleForm(request.POST, instance=MemberRole())
    mform = MemberForm(request.POST, instance=Member())
    if rform.is_valid() and mform.is_valid():
        new_role = rform.save()
        new_member = mform.save()
        return HttpResponseRedirect('member-list')
else:
    rform = MemberRoleForm(instance=MemberRole())
    mform = MemberForm(instance=Member())
return render_to_response('create_model.html', {'role_form': rform, 'member_form': mform, 'model_url': model_url,},context_instance=RequestContext(request))

snippet of create_model.html

<form action="{% url model_url %}" method="POST">
  {% csrf_token %}

  {% if model_url == 'member-list' %}

    {% for field in member_form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
    {% endfor %}
    {% for field in role_form %}
    <div class="fieldWrapper">
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
    {% endfor %}

  {% endif %}
     <input id="save_contact" type="submit" value="Add"/>
</form>
6
  • What does the error say? Commented May 27, 2014 at 15:34
  • @Razcou, hi I just added the error message to the question Commented May 27, 2014 at 15:45
  • You are getting an error 405 which means that the POST method is not allowed. Did you add 'django.middleware.csrf.CsrfViewMiddleware' to your MIDDLEWARE_CLASSES in your settings? Commented May 27, 2014 at 15:58
  • @Razcou, yes I have that in my settings. Commented May 27, 2014 at 16:02
  • is debug disabled in your settings? if so you could enable it and then it should give you a proper error message. Commented May 27, 2014 at 16:04

1 Answer 1

2

I've solved it, it was due to some errors in url naming

View

model_url = 'member-add'
return HttpResponseRedirect('members')

URLS

url(r'^members', ModelListView.as_view(model = Member,page_name = 'Members',edit_link = 'updatemember/'), name='member-list'),
url(r'^addmember', 'inventory.views.add_member', name = 'member-add'),
Sign up to request clarification or add additional context in comments.

Comments

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.