From 460dca5ababd5a8873008065892a5ce19c984716 Mon Sep 17 00:00:00 2001
From: ArturBaybulatov
Date: Fri, 24 Jun 2016 21:04:02 +0300
Subject: [PATCH] #ARC-12 Multiple file upload with filename previews 2
(editing)
---
archilance/mixins.py | 2 +
projects/admin.py | 3 +-
projects/forms.py | 33 +-
.../templates/customer_project_create.html | 12 +-
.../templates/customer_project_detail.html | 2 +-
projects/templates/customer_project_edit.html | 307 ++++++++++++++++++
.../templates/customer_project_edit_test.html | 30 +-
projects/views.py | 199 ++++++++----
.../customer_profile_open_projects.html | 2 +-
9 files changed, 478 insertions(+), 112 deletions(-)
create mode 100644 projects/templates/customer_project_edit.html
diff --git a/archilance/mixins.py b/archilance/mixins.py
index 78f1930..35eef9a 100644
--- a/archilance/mixins.py
+++ b/archilance/mixins.py
@@ -8,9 +8,11 @@ class BaseMixin(ContextMixin):
pk = self.kwargs.get('pk') # Current object's ID
next = self.kwargs.get('next') # Redirect back path
+ back = self.kwargs.get('back') # Redirect back path
if pk: c['pk'] = pk
if next: c['next'] = next
+ if back: c['back'] = back
c['domain'] = Site.objects.get_current().domain
diff --git a/projects/admin.py b/projects/admin.py
index 8a7ab29..c924c0b 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -17,8 +17,7 @@ from .models import (
class ProjectAdminForm(forms.ModelForm):
- files = forms.ModelMultipleChoiceField(queryset=Project.objects.none(), required=False)
-
+ files = forms.ModelMultipleChoiceField(queryset=ProjectFile.objects.none(), required=False)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
diff --git a/projects/forms.py b/projects/forms.py
index a750a35..50032e7 100644
--- a/projects/forms.py
+++ b/projects/forms.py
@@ -3,7 +3,7 @@ from django.db.models import Q
from django.forms.models import inlineformset_factory
from mptt.forms import TreeNodeChoiceField
-from .models import Project, Portfolio, Answer, Realty, PortfolioPhoto, Stage, Specialization
+from .models import Project, ProjectFile, Portfolio, Answer, Realty, PortfolioPhoto, Stage, Specialization
from users.models import User
@@ -14,7 +14,8 @@ class ProjectsForm(forms.Form):
name = forms.CharField(max_length=255)
-class CustomerProjectCreateForm(forms.ModelForm):
+class CustomerProjectEditForm(forms.ModelForm):
+ files = forms.ModelMultipleChoiceField(queryset=ProjectFile.objects.none(), required=False)
specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1))
class Meta:
@@ -26,6 +27,7 @@ class CustomerProjectCreateForm(forms.ModelForm):
'cro',
'currency',
'deal_type',
+ 'files',
'name',
'price_and_term_required',
'realty',
@@ -47,6 +49,9 @@ class CustomerProjectCreateForm(forms.ModelForm):
super().__init__(*args, **kwargs)
self.fields['realty'].empty_label = 'Создать новый'
+
+ if self.instance.pk:
+ self.fields['files'].queryset = self.instance.files
class RealtyForm(forms.ModelForm):
@@ -121,18 +126,18 @@ class StageForm(forms.ModelForm):
PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',))
-class CustomerProjectEditForm(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)
-
- self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
+# class CustomerProjectEditForm(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)
+#
+# self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
class CustomerProjectTrashForm(forms.Form):
diff --git a/projects/templates/customer_project_create.html b/projects/templates/customer_project_create.html
index 25d88d7..2765a5f 100644
--- a/projects/templates/customer_project_create.html
+++ b/projects/templates/customer_project_create.html
@@ -43,7 +43,7 @@
-
+
Редактировать
diff --git a/projects/templates/customer_project_edit.html b/projects/templates/customer_project_edit.html
new file mode 100644
index 0000000..11e06b9
--- /dev/null
+++ b/projects/templates/customer_project_edit.html
@@ -0,0 +1,307 @@
+{% extends 'partials/base.html' %}
+
+{% load common_tags %}
+
+{% block content %}
+ {% include 'partials/header.html' %}
+
+
+
+
+
+
+
+ {% include 'partials/footer.html' %}
+
+
+{% endblock %}
diff --git a/projects/templates/customer_project_edit_test.html b/projects/templates/customer_project_edit_test.html
index 8b4c3df..095c30a 100644
--- a/projects/templates/customer_project_edit_test.html
+++ b/projects/templates/customer_project_edit_test.html
@@ -32,35 +32,7 @@
-
Назад
-
-
-
-
-
-
-
- {% inspect form.deal_type.field %}
-
-
-
- {% inspect2 form.deal_type.field %}
-
+ {% if back %}
Назад{% endif %}
diff --git a/projects/views.py b/projects/views.py
index 812d0e2..40dc875 100644
--- a/projects/views.py
+++ b/projects/views.py
@@ -15,7 +15,7 @@ from users.models import User
from .forms import (
ContractorProjectAnswerForm,
- CustomerProjectCreateForm,
+ CustomerProjectEditForm,
PortfolioForm,
CustomerProjectDeleteForm,
CustomerProjectEditForm,
@@ -25,8 +25,32 @@ from .forms import (
)
+class ProjectsView(ListView):
+ model = Project
+ template_name = 'project_list.html'
+
+
+class ProjectView(BaseMixin, View):
+ template_name = 'project_detail.html'
+ customer_template_name = 'customer_project_detail.html'
+ form_class = ContractorProjectAnswerForm
+
+ def get(self, request, *args, **kwargs):
+ project = get_object_or_404(Project, pk=kwargs.get('pk'))
+
+ context = self.get_context_data(**_.merge({}, request.GET, kwargs))
+ context.update({'project': project})
+
+ if request.user.is_authenticated() and request.user.is_customer():
+ return render(request, self.customer_template_name, context)
+ else:
+ form = self.form_class()
+ context.update({'form': form})
+ return render(request, self.template_name, context)
+
+
class CustomerProjectCreateView(BaseMixin, View):
- form_class = CustomerProjectCreateForm
+ form_class = CustomerProjectEditForm
realty_form = RealtyForm
template_name = 'customer_project_create.html'
@@ -44,7 +68,7 @@ class CustomerProjectCreateView(BaseMixin, View):
def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
- form = self.form_class(request.POST, request=request)
+ form = self.form_class(request.POST, request.FILES, request=request)
form.is_valid()
realty = form.cleaned_data.get('realty')
@@ -60,7 +84,7 @@ class CustomerProjectCreateView(BaseMixin, View):
project.save()
form.save_m2m()
- for file in request.FILES.getlist('files'):
+ for file in request.FILES.getlist('new_files'):
proj_file = ProjectFile.objects.create(file=file, project=project)
proj_file.save()
@@ -71,6 +95,9 @@ class CustomerProjectCreateView(BaseMixin, View):
realty.user = request.user
realty.save()
realty_form.save_m2m()
+
+ project.realty = realty # Connect a realty with a project
+ project.save()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
@@ -95,65 +122,115 @@ class CustomerProjectCreateView(BaseMixin, View):
return HttpResponseForbidden('403 Forbidden')
-class ProjectsView(ListView):
- model = Project
- template_name = 'project_list.html'
-
-
-class ProjectView(BaseMixin, View):
- template_name = 'project_detail.html'
- customer_template_name = 'customer_project_detail.html'
- form_class = ContractorProjectAnswerForm
-
- def get(self, request, *args, **kwargs):
- project = get_object_or_404(Project, pk=kwargs.get('pk'))
-
- context = self.get_context_data(**_.merge({}, request.GET, kwargs))
- context.update({'project': project})
-
- if request.user.is_authenticated() and request.user.is_customer():
- return render(request, self.customer_template_name, context)
- else:
- form = self.form_class()
- context.update({'form': form})
- return render(request, self.template_name, context)
+class CustomerProjectEditView(BaseMixin, View):
+# form_class = CustomerProjectEditForm
+# template_name = 'customer_project_edit_test.html' # 'customer_project_edit.html'
+#
+# def get(self, request, *args, **kwargs):
+# if request.user.is_authenticated():
+# project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
+# form = self.form_class(instance=project, request=request)
+#
+# context = self.get_context_data(**_.merge({}, request.GET, kwargs))
+# context.update({'form': form})
+#
+# return render(request, self.template_name, context)
+# else:
+# return HttpResponseForbidden('403 Forbidden')
+#
+# def post(self, request, *args, **kwargs):
+# if request.user.is_authenticated():
+# project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
+# form = self.form_class(_.merge({}, request.POST, kwargs), request=request, instance=project)
+#
+# if form.is_valid():
+# form.save()
+#
+# messages.info(request, 'Проект успешно отредактирован')
+# redirect_to = request.POST.get('next')
+# return redirect(redirect_to)
+# else:
+# context = self.get_context_data(**kwargs)
+# context.update({'form': form})
+#
+# messages.info(request, 'Произошла ошибка:
{msg}'.format(msg=pformat(form.errors)))
+# return render(request, self.template_name, context)
+# else:
+# return HttpResponseForbidden('403 Forbidden')
+ pass
-class CustomerProjectEditView(BaseMixin, View):
- form_class = CustomerProjectEditForm
- template_name = 'customer_project_edit_test.html' # 'customer_project_edit.html'
-
- def get(self, req, *args, **kwargs):
- 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(**_.merge({}, req.GET, kwargs))
- context.update({'form': form})
-
- return render(req, self.template_name, context)
- else:
- return HttpResponseForbidden('403 Forbidden')
-
- def post(self, req, *args, **kwargs):
- 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, 'Проект успешно отредактирован')
- 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, context)
- else:
- return HttpResponseForbidden('403 Forbidden')
+# class CustomerProjectEditView(BaseMixin, View):
+# form_class = CustomerProjectEditForm
+# realty_form = RealtyForm
+# template_name = 'customer_project_edit.html'
+#
+# def get(self, request, *args, **kwargs):
+# if request.user.is_authenticated() and request.user.is_customer():
+# form = self.form_class(request=request)
+# realty_form = self.realty_form(request=request, prefix='realty_form')
+#
+# context = self.get_context_data(**_.merge({}, request.GET, kwargs))
+# context.update({'form': form, 'realty_form': realty_form})
+#
+# return render(request, self.template_name, context)
+# else:
+# return HttpResponseForbidden('403 Forbidden')
+#
+# def post(self, request, *args, **kwargs):
+# if request.user.is_authenticated() and request.user.is_customer():
+# form = self.form_class(request.POST, request.FILES, request=request)
+#
+# form.is_valid()
+# realty = form.cleaned_data.get('realty')
+#
+# if realty:
+# realty_form = self.realty_form(request.POST, instance=realty, request=request, prefix='realty_form')
+# else:
+# realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
+#
+# if form.is_valid() and realty_form.is_valid():
+# project = form.save(commit=False)
+# project.customer = request.user
+# project.save()
+# form.save_m2m()
+#
+# for file in request.FILES.getlist('files'):
+# proj_file = ProjectFile.objects.create(file=file, project=project)
+# proj_file.save()
+#
+# if realty:
+# realty_form.save()
+# else:
+# realty = realty_form.save(commit=False)
+# realty.user = request.user
+# realty.save()
+# realty_form.save_m2m()
+#
+# project.realty = realty # Connect a realty with a project
+# project.save()
+#
+# messages.info(request, 'Проект успешно создан')
+# redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
+# return redirect(redirect_to)
+# else:
+# if form.errors:
+# messages.info(request, (
+# '
Произошла ошибка (form)
'
+# '
{form}'
+# ).format(form=pformat(form.errors)))
+#
+# if realty_form and realty_form.errors:
+# messages.info(request, (
+# '
Произошла ошибка (realty_form)
'
+# '
{realty_form}'
+# ).format(realty_form=pformat(realty_form.errors)))
+#
+# context = self.get_context_data(**kwargs)
+# context.update({'form': form, 'realty_form': realty_form})
+# return render(request, self.template_name, context)
+# else:
+# return HttpResponseForbidden('403 Forbidden')
class ContractorProjectAnswerView(BaseMixin, View):
diff --git a/users/templates/customer_profile_open_projects.html b/users/templates/customer_profile_open_projects.html
index 583c7aa..7783212 100644
--- a/users/templates/customer_profile_open_projects.html
+++ b/users/templates/customer_profile_open_projects.html
@@ -75,7 +75,7 @@