Update: So editing AdviceLevel with
def edit_advice(request): if not request.user.is_authenticated(): return HttpResponseRedirect('/user/login/') this_advice = request.POST.get('advice_id') sp = Specialism.objects.all().filter(advicelevel=this_advice) de = CRSDeliveryMethod.objects.all().filter(advicelevel=this_advice) lo = Location.objects.all().filter(advicelevel=this_advice) help = OrganisationHelpTexts.objects.all() advice = request.POST.get('advice') # adv = Advice.objects.get(title=advice) # id_adv = adv.id this_org = request.session['this_org'] this = Organisation.objects.get(pk=this_org) id_org = this.id thisadvlvl = AdviceLevel.objects.get(pk=this_advice) level_1 = thisadvlvl.level_1 level_2 = thisadvlvl.level_2 level_3 = thisadvlvl.level_3 level_4 = thisadvlvl.level_4 advkey = AdviceLevelKey.objects.all() if request.POST: # raise NameError(request.POST) if 'adviceid' in request.POST: return HttpResponseRedirect('/directory/delete_advice/') if 'editform' in request.POST: editform = EditAdviceLevelForm(request.POST, instance=thisadvlvl) if editform.is_valid(): error = "" level_1 = editform.cleaned_data['level_1'] level_2 = editform.cleaned_data['level_2'] level_3 = editform.cleaned_data['level_3'] level_4 = editform.cleaned_data['level_4'] service_restriction = editform.cleaned_data['service_restriction'] service_supervisor = editform.cleaned_data['service_supervisor'] specialism = editform.cleaned_data['specialism'] delivery_method = editform.cleaned_data['delivery_method'] face_to_face_locations = editform.cleaned_data['face_to_face_locations'] if (level_3 == 0 and level_4 == 1) or (level_2 == 0 and (level_3 == 1 or level_4 == 1)) or (level_1 == 0 and (level_2 == 1 or level_3 == 1 or level_4 == 1)): error = "That isn't a possible combination, the tiers are progressive" editform = EditAdviceLevelForm(request.POST, instance=thisadvlvl) return render_to_response('directory/edit_advice.html', {'thisadvlvl': thisadvlvl, 'help': help, 'sp': sp, 'lo': lo, 'de': de, 'advice': advice, 'advkey': advkey, 'editform': editform, 'level_1': level_1, 'level_2': level_2, 'level_3': level_3, 'level_4': level_4, 'this_advice': this_advice, 'error': error, },context_instance=RequestContext(request)) editform.save() return HttpResponseRedirect('/directory/do_advice/') else: editform = EditAdviceLevelForm(request.POST, instance=thisadvlvl) else: editform = EditAdviceLevelForm(instance=thisadvlvl) return render_to_response('directory/edit_advice.html', {'thisadvlvl': thisadvlvl, 'help': help, 'sp': sp, 'lo': lo, 'de': de, 'advice': advice, 'advkey': advkey, 'editform': editform, 'level_1': level_1, 'level_2': level_2, 'level_3': level_3, 'level_4': level_4, 'this_advice': this_advice, },context_instance=RequestContext(request)) works both adding or deleting a many to many related field so the difference is in the save methods editform.save() in this working case and af = adviceform.save(commit=False) af.organisation = organisation af.save() which doesn't Now I deliberately used commit = False because I wanted to prepopulate the organisation rather than have the user select(again) the organisation so I therefore had to add the value of organisation to the form save hence using commit=False, unless someone can spot an error somewhere that is causing the problem or knows of a differnt way of accomplishing what commit does. Cannot just save the form as adviceform.save() because organisation MUST have a value see the Organisation model. Any ideas? -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/97de130b-1f4f-492b-938e-e18d28dfd5da%40googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.