def new_code(request, pid, template='new_code.html'): p = get_object_or_404(Project, pk=pid) back_or_success = reverse('browse_codes', args=(pid,)) if request.method == 'POST': c = Code() form = CodeForm(request.POST, instance=c) if form.is_valid(): c.created_by = request.user c.project = p c.save() for parent in form.cleaned_data['parent_codes']: c.parent_codes.add(parent) c.save() return redirect(back_or_success) else: form = CodeForm() form_action = reverse('new_code', args=(pid,)) return render(request, template, {'form': form, 'form_action': form_action, 'back_url': back_or_success})
def new_code(request, pid, template='new_code.html'): p = get_object_or_404(Project, pk=pid) back_or_success = reverse('browse_codes', args=(pid,)) # Create queryset to filter possible parent codes choices = Code.objects.filter(project=pid) if request.method == 'POST': c = Code() form = CodeForm(request.POST, instance=c) # Modify form's queryset for validation form.fields['parent_codes'].queryset = choices if form.is_valid(): c.created_by = request.user c.project = p c.save() for parent in form.cleaned_data['parent_codes']: c.parent_codes.add(parent) c.save() return redirect(back_or_success) else: form = CodeForm() # Only display project's codes form.fields['parent_codes'].queryset = choices form_action = reverse('new_code', args=(pid,)) return render(request, template, {'form': form, 'form_action': form_action, 'back_url': back_or_success})