def edit_idea(request, idea_id): idea = get_object_or_404(Idea, pk=int(idea_id)) original_banner = idea.banner if idea.creator != request.user: return HttpResponseRedirect(reverse('idea:idea_detail', args=(idea_id,))) if request.method == 'POST': form_initial = {'banner': None,} if original_banner: form_initial['banner'] = original_banner.id if original_banner and original_banner.is_private: form = PrivateIdeaForm(request.POST, instance=idea, initial=form_initial) else: form = IdeaForm(request.POST, instance=idea) form.fields.pop('tags') if form.is_valid(): form.save() return HttpResponseRedirect(reverse('idea:idea_detail', args=(idea_id,))) else: if 'banner' in request.POST: if original_banner: if original_banner.is_private: current_banners = Banner.objects.filter(id=original_banner.id) else: current_banners = get_current_banners([original_banner.id]) else: current_banners = get_current_banners() form.fields["banner"].queryset = current_banners else: form.fields.pop('banner') form.fields.pop('challenge-checkbox') form.set_error_css() return _render(request, 'idea/edit.html', {'form': form, 'idea': idea }) else: form_initial = {'banner': None,} if original_banner: form_initial['banner'] = original_banner.id # private room if original_banner and original_banner.is_private: form = PrivateIdeaForm(instance=idea, initial=form_initial) form.fields["banner"].queryset = Banner.objects.filter(id=original_banner.id) # challenge else: if original_banner: current_banners = get_current_banners([original_banner.id]) form_initial["challenge-checkbox"] = "on" else: current_banners = get_current_banners() form = IdeaForm(instance=idea, initial=form_initial) if len(current_banners) == 0: form.fields.pop('banner') form.fields.pop('challenge-checkbox') else: form.fields["banner"].queryset = current_banners form.fields.pop('tags') return _render(request, 'idea/edit.html', {'form': form, 'idea': idea })
def add_idea(request, banner_id=None): if request.method == 'POST': matching_ideas = Idea.objects.filter( creator=request.user, title=request.POST.get('title', '')) if matching_ideas.count() > 0: # user already submitted this idea return HttpResponseRedirect(reverse('idea:idea_detail', args=(matching_ideas[0].id,))) idea = Idea(creator=request.user, state=state_helper.get_first_state()) banner = None if banner_id: banner = get_object_or_404(Banner, pk=int(banner_id)) if idea.state.name == 'Active': if banner and banner.is_private: form = PrivateIdeaForm(request.POST, instance=idea, initial={'banner':banner_id}) else: form = IdeaForm(request.POST, instance=idea, initial={'banner':banner_id}) if form.is_valid(): new_idea = form.save() vote_up(new_idea, request.user) return _render(request, 'idea/add_success.html', {'idea': new_idea, 'banner': banner}) else: if 'banner' in request.POST: if banner and banner.is_private: form.fields["banner"].queryset = Banner.objects.filter(id=banner.id) else: form.fields["banner"].queryset = get_current_banners() else: form.fields.pop('banner') form.fields.pop('challenge-checkbox') form.set_error_css() return _render(request, 'idea/add.html', {'form': form, 'banner': banner}) else: return HttpResponse('Idea is archived', status=403) else: idea_title = request.GET.get('idea_title', '') current_banners = get_current_banners() form_initial = {'title': idea_title, 'banner': None} banner = None if banner_id: banner = get_object_or_404(Banner, pk=int(banner_id)) if banner and banner.is_private: form_initial['banner'] = banner.id form = PrivateIdeaForm(initial=form_initial) form.fields["banner"].queryset = Banner.objects.filter(id=banner_id) elif current_banners.count() == 0: form = IdeaForm(initial=form_initial) form.fields.pop('banner') form.fields.pop('challenge-checkbox') else: if banner: if banner not in current_banners: banner = None else: form_initial['banner'] = banner.id form_initial['challenge-checkbox'] = "on" form = IdeaForm(initial=form_initial) form.fields["banner"].queryset = current_banners return _render(request, 'idea/add.html', { 'form': form, 'banner': banner, })