working django, have model foo
foreign key model bar
. when create foo
object on site, want able set attributes of bar
object in same form.
i'm able set view , template use these 2 models in same form. however, when go submit form, 403 forbidden error saying:
csrf token missing or incorrect.
i have {% csrf_token %}
tag in form, i'm not sure how fix this. have ideas?
in views.py:
def foo_add(request): if request.method == "post": fooform = fooform(request.post, instance=foo()) barform = barform(request.post, instance=bar()) if fooform.is_valid() , barform.is_valid(): foo = fooform.save() bar = barform.save() return httpresponseredirect('/foos/add') else: fooform = fooform(instance=foo()) barform = barform(instance=bar()) return render_to_response( 'foo_app/foo_add.html', {'foo_form': fooform, 'bar_form': barform} )
foo_add.html:
{% extends "foo_app/__base.html" %} {% load bootstrap3 %} {% block content %} <form action="" method="post">{% csrf_token %} {% bootstrap_form foo_form layout='inline' %} {% bootstrap_form var_form layout='inline' %} {% buttons %} <button type="submit" class="btn btn-primary"> {% bootstrap_icon "star" %} save foo </button> {% endbuttons %} </form> {% endblock %}
edit: i'm not asking how create form 2 models. i'm pretty sure form getting created correctly , information getting passed expected. i'm asking why 403 error after have filled out form , submitted it.
here generated html looks like:
<form action="" method="post"> <div class="form-group"> <label class="sr-only" for="id_foo-a">a</label> <input class="form-control" id="id_foo-a" name="foo-a" placeholder="a" required="required" title="" type="text" /> </div> <div class="form-group"> <label class="sr-only" for="id_bar-b">b</label> <input class="form-control" id="id_bar-b" min="0" name="bar-b" placeholder="b" required="required" title="" type="number" /> </div> <div class="form-group"> <button type="submit" class="btn btn-primary"> <span class="glyphicon glyphicon-star"></span> save foo </button> </div> </form>
use render
shortcut instead of render_to_response
. ensures template rendered request
, allows csrf_token
tag work.
from django.shortcuts import render def foo_add(request): ... return render( request, 'foo_app/foo_add.html', {'foo_form': fooform, 'bar_form': barform}, )
Comments
Post a Comment