ipv6-dot-work/jobs/views.py

111 lines
3.5 KiB
Python

from django.urls import reverse_lazy
from django.http import HttpResponseRedirect
from django.views.generic import (
TemplateView, ListView, CreateView, DetailView
)
from .models import Job, Application, Question
from .forms import JobForm, QuestionFormSet, ApplicationForm, AnswerForm
class Index(TemplateView):
template_name = 'jobs/index.html'
class JobList(ListView):
context_object_name = 'jobs'
model = Job
class JobDetail(DetailView):
context_object_name = 'job'
model = Job
class JobCreate(CreateView):
model = Job
form_class = JobForm
success_url = reverse_lazy("jobs:list")
def get(self, request, *args, **kwargs):
self.object = None
form = self.get_form(self.get_form_class())
question_form = QuestionFormSet()
return self.render_to_response(
self.get_context_data(form=form, question_form=question_form))
def post(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
question_form = QuestionFormSet(self.request.POST)
if (form.is_valid() and question_form.is_valid()):
return self.form_valid(form, question_form)
else:
return self.form_invalid(form, question_form)
def form_valid(self, form, question_form):
self.object = form.save(commit=False)
self.object.posted_by = self.request.user
self.object.save()
question_form.instance = self.object
question_form.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, question_form):
return self.render_to_response(
self.get_context_data(
form=form,
question_form=question_form))
class ApplicationCreate(CreateView):
# TODO: restrict users from re-application
model = Application
form_class = ApplicationForm
success_url = reverse_lazy("jobs:list")
def get_question_queryset(self):
return Question.objects.filter(job_id=self.kwargs['job_pk']).order_by('id')
def get_answer_formset(self, *args):
questions = self.get_question_queryset()
return AnswerForm.inlineformset_factory(
extra=questions.count())(initial=[{
'question': q.id
} for q in questions], *args)
def get(self, request, *args, **kwargs):
self.object = None
form = self.get_form(self.get_form_class())
answer_form = self.get_answer_formset()
return self.render_to_response(
self.get_context_data(form=form, answer_form=answer_form))
def post(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
answer_form = self.get_answer_formset(self.request.POST)
if (form.is_valid() and answer_form.is_valid()):
return self.form_valid(form, answer_form)
else:
return self.form_invalid(form, answer_form)
def form_valid(self, form, answer_form):
self.object = form.save(commit=False)
self.object.applicant = self.request.user
self.object.job = Job.objects.get(id=self.kwargs['job_pk'])
self.object.save()
answer_form.instance = self.object
answer_form.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, answer_form):
return self.render_to_response(
self.get_context_data(form=form, answer_form=answer_form))