def edit_topic(request, committee_id, topic_id=None): if request.method == 'POST': if topic_id: t = Topic.objects.get(pk=topic_id) if not t.can_edit(request.user): return HttpResponseForbidden() else: t = None edit_form = EditTopicForm(data=request.POST, instance=t) links_formset = LinksFormset(request.POST) if edit_form.is_valid() and links_formset.is_valid(): topic = edit_form.save(commit=False) if topic_id: topic.id = topic_id else: # new topic topic.creator = request.user topic.save() edit_form.save_m2m() links = links_formset.save(commit=False) ct = ContentType.objects.get_for_model(topic) for link in links: link.content_type = ct link.object_pk = topic.id link.save() messages.add_message(request, messages.INFO, 'Topic has been updated') return HttpResponseRedirect( reverse('topic-detail', args=[topic.id])) if request.method == 'GET': if topic_id: # editing existing topic t = Topic.objects.get(pk=topic_id) if not t.can_edit(request.user): return HttpResponseForbidden() edit_form = EditTopicForm(instance=t) ct = ContentType.objects.get_for_model(t) links_formset = LinksFormset(queryset=Link.objects.filter( content_type=ct, object_pk=t.id)) else: # create new topic for given committee c = Committee.objects.get(pk=committee_id) edit_form = EditTopicForm(initial={'committees': [c]}) links_formset = LinksFormset(queryset=Link.objects.none()) return render_to_response('committees/edit_topic.html', context_instance=RequestContext(request, { 'edit_form': edit_form, 'links_formset': links_formset, }))
def edit_topic(request, committee_id, topic_id=None): if request.method == 'POST': if topic_id: t = Topic.objects.get(pk=topic_id) if request.user != t.creator: return HttpResponseForbidden() else: t = None edit_form = EditTopicForm(data=request.POST, instance=t) links_formset = LinksFormset(request.POST) if edit_form.is_valid() and links_formset.is_valid(): topic = edit_form.save(commit=False) if topic_id: topic.id = topic_id else: # new topic topic.creator = request.user topic.save() edit_form.save_m2m() links = links_formset.save(commit=False) ct = ContentType.objects.get_for_model(topic) for link in links: link.content_type = ct link.object_pk = topic.id link.save() m = request.user.message_set.create() m.message = 'Topic has been updated.' m.save() return HttpResponseRedirect( reverse('topic-detail', args=[topic.id])) if request.method == 'GET': if topic_id: # editing existing topic t = Topic.objects.get(pk=topic_id) if request.user != t.creator: return HttpResponseForbidden() edit_form = EditTopicForm(instance=t) ct = ContentType.objects.get_for_model(t) links_formset = LinksFormset( queryset=Link.objects.filter(content_type=ct, object_pk=t.id)) else: # create new topic for given committee c = Committee.objects.get(pk=committee_id) edit_form = EditTopicForm(initial={'committees': [c]}) links_formset = LinksFormset(queryset=Link.objects.none()) return render_to_response('committees/edit_topic.html', context_instance=RequestContext( request, { 'edit_form': edit_form, 'links_formset': links_formset, }))