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 @@

- + Редактировать - - снять с публикачии - + +
+ {% csrf_token %} + + + + Снять с публикации + +
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 %} -
- {% csrf_token %} - - {{ form }} - - - -
-{% endblock %} +{% load staticfiles %} + + + + + + + + + +Archilance + + + + + + + +{% if messages %} + {% for message in messages %} +
{{ message | safe }}
+ {% endfor %} +{% endif %} + +

"pk": {{ pk }}

+ +
+ {% csrf_token %} + + {{ form.as_p }} + + + +
+ + + + + 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

-
{% csrf_token %} - {{ form.as_p }} - {{ realty_form.errors}} - {{ realty_form.as_p }} - -
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

-
{% csrf_token %} - {{ form.errors }} - {{ form.as_p }} - {{ second_form.errors }} - {{ second_form.as_p }} - -
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 @@ -
+
@@ -72,18 +72,15 @@ diff --git a/users/templates/customer_profile_trashed_projects.html b/users/templates/customer_profile_trashed_projects.html index 4750dab..4c37995 100644 --- a/users/templates/customer_profile_trashed_projects.html +++ b/users/templates/customer_profile_trashed_projects.html @@ -74,7 +74,8 @@
{% csrf_token %} - + + Восстановить из корзины
@@ -82,7 +83,8 @@
{% csrf_token %} - + + Удалить навсегда