from django.http import HttpResponseForbidden from django.core.urlresolvers import reverse from django.contrib.auth.mixins import PermissionRequiredMixin from django.views.generic import ListView, DetailView, CreateView from django.views.generic.edit import FormMixin from .models import Project, Portfolio from .forms import ProjectForm, PortfolioForm, AnswerForm class ProjectListView(ListView): model = Project def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) return context class ProjectDetailView(FormMixin, DetailView): model = Project form_class = AnswerForm def get_success_url(self): return reverse('projects:detail', kwargs={'pk': self.object.pk}) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['form'] = self.get_form() return context def get_form_kwargs(self, **kwargs): kwargs = super().get_form_kwargs(**kwargs) kwargs.update({'project_id': self.object.pk}) return kwargs def post(self, request, *args, **kwargs): if not request.user.is_authenticated(): return HttpResponseForbidden() self.object = self.get_object() form = self.get_form() if form.is_valid(): return self.form_valid(form) else: return self.form_invalid(form) def form_valid(self, form): answer = form.instance answer.user = self.request.user answer.save() return super().form_valid(form) class ProjectCreateView(PermissionRequiredMixin, CreateView): model = Project permission_required = ('projects.add_project',) raise_exception = True form_class = ProjectForm success_url = '/projects/' # TODO: Use `reverse_lazy('projects-list')` from `django.core.urlresolvers` def form_valid(self, form): project = form.instance project.user = self.request.user project.save() return super().form_valid(form) class PortfolioCreateView(PermissionRequiredMixin, CreateView): model = Portfolio form_class = PortfolioForm permission_required = ('projects.add_portfolio',) success_url = '/projects/' # import code; code.interact(local=dict(globals(), **locals()))