from django.http import HttpResponseForbidden, HttpResponseRedirect from django.core.urlresolvers import reverse from django.contrib.auth.mixins import PermissionRequiredMixin from django.views.generic import ListView, DetailView, CreateView, View, TemplateView from django.views.generic.edit import FormMixin from .models import Project, Portfolio from .forms import ProjectForm, PortfolioForm, AnswerForm, RealtyForm 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/' class ProjectCreateView(PermissionRequiredMixin, View): permission_required = ('projects.add_project',) project_form = ProjectForm realty_form = RealtyForm template_name = 'projects/project_form.html' def get(self, request, *args, **kwargs): project_form = self.project_form() realty_form = self.realty_form(prefix='realty_form') return render(request, self.template_name, {'project_form': project_form , 'realty_form': realty_form}) def post(self, request, *args, **kwargs): project_form = self.project_form(request.POST) realty_form = self.realty_form(request.POST, prefix='realty_form') if project_form.is_valid() and realty_form.is_valid(): return self.form_valid(request, project_form, realty_form) return render(request, self.template_name, {'project_form': project_form , 'realty_form': realty_form}) def form_valid(self, request, project_form, realty_form): realty = realty_form.save(commit=False) realty.user = request.user realty.save() project = project_form.save(commit=False) project.user = request.user project.realty = realty project.save() return HttpResponseRedirect('/projects/') class TestView(View): template_name = 'projects/test_form.html' form_class = RealtyForm form_second = ProjectForm def get(self, request, *args, **kwargs): form = self.form_class() second_form = self.form_second(prefix='form_2') return render(request,self.template_name, {'form': form, 'second_form': second_form}) def post(self, request, *args, **kwargs): form = self.form_class(request.POST) second_form = self.form_second(request.POST,prefix='form_2') if form.is_valid() and second_form.is_valid(): return self.form_valid(request, form, second_form) return render(request, self.template_name, {'form': form, 'second_form': second_form}) def form_valid(self, request, form, second_form): realty = form.save(commit=False) realty.user = request.user realty.save() project = second_form.save(commit=False) project.user = request.user project.realty = realty project.save() return HttpResponseRedirect('/projects/') def form_invalid(self, form, second_form): pass class TestProjectView(View): model = Project form_class = ProjectForm template_name = 'projects/test.html' success_url = '/projects/' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['realty_form'] = RealtyForm(prefix='form_2') return context # def get(self, request, *args, **kwargs): # self.object = None def post(self, request, *args, **kwargs): self.object = None form_class = self.get_form_class() form = self.get_form(form_class) realty_form = RealtyForm(self.request.POST) # import code; code.interact(local=dict(globals(), **locals())) if form.is_valid(): return self.form_valid(form, realty_form) else: return self.form_invalid(form, realty_form) def form_valid(self, form, realty_form): status = 'form_valid' realty = realty_form.instance realty.user = self.request.user realty.save() project = form.instance project.user = self.request.user project.realty = realty project.save() # import code; code.interact(local=dict(globals(), **locals())) def form_invalid(self, form, realty_form): status = 'form_invalid' return self.render_to_response( self.get_context_data(form=form, realty_form=realty_form)) from django.shortcuts import render from .forms import PortfolioPhotoFormSet def manage_articles(request): form = PortfolioForm portfolio_photo_form = PortfolioPhotoFormSet() if request.method == "POST": form = PortfolioForm(request.POST) portfolio_photo_form = PortfolioPhotoFormSet(request.POST, request.FILES) import code; code.interact(local=dict(globals(), **locals())) return render(request, 'projects/testport.html', {'form': form, 'portfolio_photo_form': portfolio_photo_form})