You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.2 KiB
76 lines
2.2 KiB
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(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()))
|
|
|