What I'm doing now is # TEMPLATE {% if modelform.instance.id %} <input type="hidden" name="pk" value="{{modelform.instance.id}}"/ > {% endif %}
# The POST part of the view method pk = request.POST.get('pk',None) if pk: model = models.House.objects.get(pk=pk) modelform = forms.MyModelForm(request.POST, instance=house) else: modelform = forms.MyModelForm(request.POST) Anyone else use this approach? gene On Aug 15, 12:07 pm, "ristretto.rb" <ristretto...@gmail.com> wrote: > This is an excellent thread. I came here with the same questions as > Marc. My revelation seems to be that forms are for data, and saving > is control. And these two have separate concerns/goals. Such that > fields shouldn't be in forms for the sole reason to make control of > the form function properly. > > So you can put the id in you forms with a hidden, or in the action="" > attribute, or using some sort of JavaScript, or whatever. So, I > understand that the key should be controlled outside the scope of the > Django form support. > > But, I wonder if something like {{ form_set.management_form }} for > formsets could be used here. Perhaps something like > {{form.indentifier_key}} on a template in the form could by default > write out a hidden field of the pk of the instance. It would just be > shorthand for putting the instance in the context, and typing <input > type="hidden" name="pk" value="{{instance.id}}"..../> > > But, it could make your view work like this, so you don't have to > query up the model instance yourself. > > f = your_modelform(request.POST) > f.instance # would be the read from the DB and set for you. > > Gene > > On Jul 22, 9:23 am, Shawn Milochik <shawn.m...@gmail.com> wrote: > > > To expand on what Dan said with a full (tested and working) example: > > > In urls.py: > > > (r'^partner/$', 'partner_page'), > > (r'^partner/(?P<partner_id>\d+)/$', 'partner_page'), > > > In the form tag of your template: > > <form id="approval_form" method="post" action="/partner/{% if > > partner_id %}{{ partner_id}}/{% endif %}"> > > > The view: > > > @login_required > > def partner_page(request, partner_id = None): > > > if partner_id: > > #existing partner > > partner_instance = get_object_or_404(partner, pk = partner_id) > > else: > > #new partner > > partner_form = partnerForm() > > partner_instance = None > > > if request.POST: > > post_data = request.POST.copy() > > partner_form = partnerForm(post_data, instance = > > partner_instance) > > > if partner_form.is_valid(): > > the_partner = partner_form.save() > > partner_id = the_partner.id > > > template_file = 'partner.html' > > > context = { > > 'partner_form': partner_form, > > 'partner_id': partner_id, > > } > > > return render_to_response(template_file, context, > > RequestContext(request)) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---