From 9b5d238e28c2ba622dbc5b6e7540c4923e0b681c Mon Sep 17 00:00:00 2001
From: ArturBaybulatov
Date: Thu, 16 Jun 2016 13:14:32 +0300
Subject: [PATCH] #ARC-11
---
projects/admin.py | 1 +
projects/forms.py | 6 +-
.../templates/customer_project_detail.html | 14 ++-
projects/templates/project_edit_test.html | 51 +++++++--
projects/templates/test.html | 7 --
projects/templates/test_form.html | 8 --
projects/views.py | 107 ++++--------------
users/models.py | 9 +-
.../customer_profile_open_projects.html | 11 +-
.../customer_profile_trashed_projects.html | 6 +-
10 files changed, 90 insertions(+), 130 deletions(-)
delete mode 100644 projects/templates/test.html
delete mode 100644 projects/templates/test_form.html
diff --git a/projects/admin.py b/projects/admin.py
index a61cfe0..f9faa7a 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -7,6 +7,7 @@ from .models import Project, Portfolio, PortfolioPhoto, \
class ProjectAdmin(admin.ModelAdmin):
readonly_fields = ('pk',)
+ list_display = ('name','pk','customer','state')
admin.site.register(Answer)
diff --git a/projects/forms.py b/projects/forms.py
index 46a2e51..0779cdf 100644
--- a/projects/forms.py
+++ b/projects/forms.py
@@ -137,9 +137,13 @@ class ProjectDeleteForm(Form):
self.fields['pk'].queryset = self.req.user.projects.filter(Q(state='active') | Q(state='trashed'))
-class ProjectEditForm(Form):
+class ProjectEditForm(forms.ModelForm):
pk = forms.ModelChoiceField(queryset=Project.objects.none())
+ class Meta:
+ model = Project
+ fields = '__all__'
+
def __init__(self, *args, **kwargs):
self.req = kwargs.pop('req')
super().__init__(*args, **kwargs)
diff --git a/projects/templates/customer_project_detail.html b/projects/templates/customer_project_detail.html
index 93216ca..ffe72ad 100644
--- a/projects/templates/customer_project_detail.html
+++ b/projects/templates/customer_project_detail.html
@@ -77,12 +77,18 @@
diff --git a/projects/templates/project_edit_test.html b/projects/templates/project_edit_test.html
index 1f782b5..28a1bc5 100644
--- a/projects/templates/project_edit_test.html
+++ b/projects/templates/project_edit_test.html
@@ -1,12 +1,39 @@
-{% extends 'partials/base.html' %}
-
-{% block content %}
-
-{% endblock %}
+{% load staticfiles %}
+
+
+
+
+
+
+
+
+
+
Archilance
+
+
+
+
+
+
+
+{% if messages %}
+ {% for message in messages %}
+
{{ message | safe }}
+ {% endfor %}
+{% endif %}
+
+
"pk": {{ pk }}
+
+
+
+
+
+
+
diff --git a/projects/templates/test.html b/projects/templates/test.html
deleted file mode 100644
index 04bb4c4..0000000
--- a/projects/templates/test.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
Test page
-
diff --git a/projects/templates/test_form.html b/projects/templates/test_form.html
deleted file mode 100644
index a949574..0000000
--- a/projects/templates/test_form.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
Test form
-
diff --git a/projects/views.py b/projects/views.py
index 27e84fa..ce5c5b0 100644
--- a/projects/views.py
+++ b/projects/views.py
@@ -4,11 +4,13 @@ from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, DetailView, CreateView, View, TemplateView, FormView
+from django.views.generic.base import ContextMixin
from pprint import pprint, pformat
import pydash as _
-from users.models import User
from .models import Project, Portfolio, Candidate, Answer, Realty, Order
+from archilance.mixins import BaseMixin
+from users.models import User
from .forms import (
AnswerForm,
@@ -102,8 +104,6 @@ class ProjectCreateView(PermissionRequiredMixin, View):
return HttpResponseRedirect('/projects/')
- def form_invalid(self, form, second_form):
- pass
class ProjectTrashView(View):
@@ -172,104 +172,43 @@ class ProjectDeleteView(View):
return redirect(redirect_to)
-class ProjectEditView(View):
+class ProjectEditView(BaseMixin, View):
form_class = ProjectEditForm
template_name = 'project_edit_test.html' # 'project_edit.html'
def get(self, req, *args, **kwargs):
- form = self.form_class()
- return render(req, self.template_name, {'form': form})
+ if req.user.is_authenticated():
+ project = get_object_or_404(req.user.projects, pk=kwargs.get('pk'))
+ form = self.form_class(instance=project, req=req)
+
+ context = self.get_context_data(**kwargs)
+ context.update({'form': form})
+
+ return render(req, self.template_name, context)
+ else:
+ return HttpResponseForbidden('403 Forbidden')
def post(self, req, *args, **kwargs):
- form = self.form_class(_.merge({}, req.POST, kwargs), req=req)
-
if req.user.is_authenticated():
+ project = get_object_or_404(req.user.projects, pk=kwargs.get('pk'))
+ form = self.form_class(_.merge({}, req.POST, kwargs), req=req, instance=project)
+
if form.is_valid():
- #...
+ form.save()
- messages.info(req, 'Проект (как будто) успешно отредактирован')
+ messages.info(req, 'Проект успешно отредактирован')
redirect_to = req.POST.get('next')
return redirect(redirect_to)
else:
+ context = self.get_context_data(**kwargs)
+ context.update({'form': form})
+
messages.info(req, 'Произошла ошибка:
{msg}'.format(msg=pformat(form.errors)))
- return render(req, self.template_name, {'form': form})
+ return render(req, self.template_name, context)
else:
return HttpResponseForbidden('403 Forbidden')
-class TestView(View):
- template_name = '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/')
-
-
-class TestProjectView(View):
- model = Project
- form_class = ProjectForm
- template_name = '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))
-
-
class ProjectComparisonView(DetailView):
model = Project
template_name = 'comparison.html'
diff --git a/users/models.py b/users/models.py
index b76330a..72b72c6 100644
--- a/users/models.py
+++ b/users/models.py
@@ -38,7 +38,6 @@ GENDERS = (
)
-
class ContractorFinancialInfo(models.Model):
RESIDENCIES = (
('russian_resident', 'Резидент РФ'),
@@ -46,16 +45,16 @@ class ContractorFinancialInfo(models.Model):
('refugee', 'Беженец'),
('russian_stay_permit', 'Вид на жительство'),
)
-
+
LEGAL_STATUSES = (
('individual', 'Физическое лицо'),
- ('legal_entity', 'ИП и Юридическое лицо'),
+ ('legal_entity', 'ИП и юридическое лицо'),
)
-
+
fio = models.CharField(max_length=255)
date_of_birth = models.DateTimeField()
phone = models.CharField(max_length=30)
- residency = models.CharField(max_length=50,choices=RESIDENCIES)
+ residency = models.CharField(max_length=50, choices=RESIDENCIES)
legal_status = models.CharField(max_length=30, choices=LEGAL_STATUSES)
passport_series = models.CharField(max_length=6)
passport_number = models.CharField(max_length=10)
diff --git a/users/templates/customer_profile_open_projects.html b/users/templates/customer_profile_open_projects.html
index 51cb31d..ef72104 100644
--- a/users/templates/customer_profile_open_projects.html
+++ b/users/templates/customer_profile_open_projects.html
@@ -27,7 +27,7 @@
-
+