From 9dccdd1a7353212e26bfa56125e8fa1c6ced4e89 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Fri, 27 May 2016 11:50:51 +0300 Subject: [PATCH] add spec dropdown --- .gitignore | 3 + archilance/settings/dev.py | 2 +- archilance/urls.py | 2 +- assets/js/main.js | 5 +- media/projects/portfolio/gal.jpg | Bin 0 -> 47227 bytes .../portfolio/meet-the-team-image-2.jpg | Bin 0 -> 36422 bytes projects/admin.py | 14 +- projects/forms.py | 30 +- .../migrations/0007_auto_20160525_0948.py | 21 + .../migrations/0008_auto_20160525_1044.py | 41 ++ .../migrations/0009_auto_20160525_1524.py | 41 ++ .../migrations/0010_auto_20160525_1525.py | 22 + .../migrations/0011_auto_20160525_1526.py | 21 + projects/models.py | 47 +- projects/templates/projects/project_form.html | 477 +++++++-------- projects/templates/projects/test.html | 7 + projects/templates/projects/testport.html | 18 + projects/urls.py | 6 +- projects/views.py | 62 +- specializations/models.py | 4 + .../specialization/specialization_list.html | 30 - .../specialization_detail.html | 4 + .../specializations/specialization_list.html | 67 ++ specializations/urls.py | 8 +- specializations/views.py | 45 +- templates/base.html | 1 + users/migrations/0006_auto_20160525_0948.py | 21 + users/migrations/0007_auto_20160525_1526.py | 21 + users/migrations/0008_auto_20160525_1527.py | 21 + users/models.py | 11 +- users/templates/users/contractor.html | 577 ++++++++++++++++++ users/templates/users/customer.html | 4 + users/urls.py | 5 +- users/views.py | 32 +- 34 files changed, 1379 insertions(+), 291 deletions(-) create mode 100644 media/projects/portfolio/gal.jpg create mode 100644 media/projects/portfolio/meet-the-team-image-2.jpg create mode 100644 projects/migrations/0007_auto_20160525_0948.py create mode 100644 projects/migrations/0008_auto_20160525_1044.py create mode 100644 projects/migrations/0009_auto_20160525_1524.py create mode 100644 projects/migrations/0010_auto_20160525_1525.py create mode 100644 projects/migrations/0011_auto_20160525_1526.py create mode 100644 projects/templates/projects/test.html create mode 100644 projects/templates/projects/testport.html delete mode 100644 specializations/templates/specialization/specialization_list.html create mode 100644 specializations/templates/specializations/specialization_detail.html create mode 100644 specializations/templates/specializations/specialization_list.html create mode 100644 users/migrations/0006_auto_20160525_0948.py create mode 100644 users/migrations/0007_auto_20160525_1526.py create mode 100644 users/migrations/0008_auto_20160525_1527.py create mode 100644 users/templates/users/contractor.html create mode 100644 users/templates/users/customer.html diff --git a/.gitignore b/.gitignore index 5c00400..cf2bf01 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ *.pyc .idea/ env/ +.ar/ +ar/ + diff --git a/archilance/settings/dev.py b/archilance/settings/dev.py index 012ec93..8fc56c2 100644 --- a/archilance/settings/dev.py +++ b/archilance/settings/dev.py @@ -1,5 +1,5 @@ from .base import * -# INSTALLED_APPS += ['debug_toolbar'] +INSTALLED_APPS += ['debug_toolbar'] AUTH_PASSWORD_VALIDATORS = [] diff --git a/archilance/urls.py b/archilance/urls.py index addbc88..d6f7aa8 100644 --- a/archilance/urls.py +++ b/archilance/urls.py @@ -11,7 +11,7 @@ urlpatterns = [ url(r'^$', HomeTemplateView.as_view()), url(r'^test/$', TemplateView.as_view(template_name='test.html'), name='test'), url(r'^projects/', include('projects.urls')), - url(r'^specialization/', include('specializations.urls')), + url(r'^specializations/', include('specializations.urls')), url(r'^users/', include('registration.backends.default.urls')), url(r'^users/', include('users.urls')), url(r'^admin/', admin.site.urls), diff --git a/assets/js/main.js b/assets/js/main.js index c95be8d..8a84a48 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -3,7 +3,8 @@ $(document).ready(function(){ $('.messd:first').addClass('mesAct'); $('.orderBlock:first').addClass('orAct'); - $('.resButtonF1').click(function(){ + $('.resButtonF1').click(function(e){ + e.preventDefault(); $('.slideRes').toggleClass('activeSlide'); if($('.slideRes').hasClass('activeSlide')) { $('.slideRes').slideUp(300); @@ -49,4 +50,4 @@ $(document).ready(function(){ width: '117px' }); -}); \ No newline at end of file +}); diff --git a/media/projects/portfolio/gal.jpg b/media/projects/portfolio/gal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84a447a9f067e617de9aeb6978714b48eec30bd9 GIT binary patch literal 47227 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ඪNF5_fUK4CMP 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 literal 0 HcmV?d00001 diff --git a/projects/admin.py b/projects/admin.py index 5e6a1b6..ad30f53 100644 --- a/projects/admin.py +++ b/projects/admin.py @@ -1,8 +1,20 @@ from django.contrib import admin -from .models import Project, Portfolio, PortfolioPhoto, Answer +from .models import Project, Portfolio, PortfolioPhoto, Answer, Realty, Candidate, Order + + +# class UserAdmin(admin.ModelAdmin): +# readonly_fields = ('pk',) +# list_display = ('email','is_active',) +# +# def get_groups(self, obj): +# return ', '.join(g.name for g in obj.groups.all()) + admin.site.register(Project) admin.site.register(Answer) admin.site.register(Portfolio) admin.site.register(PortfolioPhoto) +admin.site.register(Realty) +admin.site.register(Order) +admin.site.register(Candidate) diff --git a/projects/forms.py b/projects/forms.py index c522833..c4b5d51 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -1,18 +1,39 @@ -from django.forms import ModelForm, HiddenInput -from .models import Project, Portfolio, Answer +from django import forms +from django.forms import ModelForm, HiddenInput, Form +from django.forms.models import inlineformset_factory +from .models import Project, Portfolio, Answer, Realty, PortfolioPhoto + +# RealtyFormSet = inlineformset_factory(Project, Realty) class ProjectForm(ModelForm): class Meta: model = Project - fields = ( 'name', 'price', 'specialization', 'text', + 'type_work', + 'secure_transaction', ) + +class ProjectsForm(Form): + name = forms.CharField(max_length=255) + + +class RealtyForm(ModelForm): + class Meta: + model = Realty + fields = ( + 'name', + 'building_classification', + 'type_construction', + 'country', + 'city', + ) + class PortfolioForm(ModelForm): class Meta: model = Portfolio @@ -39,3 +60,6 @@ class AnswerForm(ModelForm): widgets = { 'project': HiddenInput(), } + +from django.forms.models import inlineformset_factory +PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',)) diff --git a/projects/migrations/0007_auto_20160525_0948.py b/projects/migrations/0007_auto_20160525_0948.py new file mode 100644 index 0000000..311806e --- /dev/null +++ b/projects/migrations/0007_auto_20160525_0948.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 09:48 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0006_auto_20160524_1208'), + ] + + operations = [ + migrations.AlterField( + model_name='answer', + name='created', + field=models.DateTimeField(default=datetime.datetime(2016, 5, 25, 9, 48, 35, 275911)), + ), + ] diff --git a/projects/migrations/0008_auto_20160525_1044.py b/projects/migrations/0008_auto_20160525_1044.py new file mode 100644 index 0000000..71edc9f --- /dev/null +++ b/projects/migrations/0008_auto_20160525_1044.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 10:44 +from __future__ import unicode_literals + +import datetime +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('projects', '0007_auto_20160525_0948'), + ] + + operations = [ + migrations.CreateModel( + name='Realty', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('building_classification', models.CharField(max_length=50)), + ('type_construction', models.CharField(max_length=50)), + ('country', models.CharField(max_length=50)), + ('city', models.CharField(max_length=50)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realty', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AlterField( + model_name='answer', + name='created', + field=models.DateTimeField(default=datetime.datetime(2016, 5, 25, 10, 44, 29, 360210)), + ), + migrations.AddField( + model_name='project', + name='realty', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='projects.Realty'), + ), + ] diff --git a/projects/migrations/0009_auto_20160525_1524.py b/projects/migrations/0009_auto_20160525_1524.py new file mode 100644 index 0000000..6f35dc9 --- /dev/null +++ b/projects/migrations/0009_auto_20160525_1524.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 15:24 +from __future__ import unicode_literals + +import datetime +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('projects', '0008_auto_20160525_1044'), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cost', models.DecimalField(decimal_places=2, max_digits=10)), + ('term', models.IntegerField(default=1)), + ('created', models.DateTimeField(default=django.utils.timezone.now, editable=False)), + ('status', models.BooleanField(default=False)), + ('contractor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('project', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='order', to='projects.Project')), + ], + ), + migrations.AlterModelOptions( + name='realty', + options={'verbose_name': 'Объект', 'verbose_name_plural': 'Объекты'}, + ), + migrations.AlterField( + model_name='answer', + name='created', + field=models.DateTimeField(default=datetime.datetime(2016, 5, 25, 15, 24, 2, 462642)), + ), + ] diff --git a/projects/migrations/0010_auto_20160525_1525.py b/projects/migrations/0010_auto_20160525_1525.py new file mode 100644 index 0000000..77bc8e9 --- /dev/null +++ b/projects/migrations/0010_auto_20160525_1525.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 15:25 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0009_auto_20160525_1524'), + ] + + operations = [ + migrations.AlterField( + model_name='answer', + name='created', + field=models.DateTimeField(default=datetime.datetime(2016, 5, 25, 15, 25, 42, 489763, tzinfo=utc)), + ), + ] diff --git a/projects/migrations/0011_auto_20160525_1526.py b/projects/migrations/0011_auto_20160525_1526.py new file mode 100644 index 0000000..601de14 --- /dev/null +++ b/projects/migrations/0011_auto_20160525_1526.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 15:26 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0010_auto_20160525_1525'), + ] + + operations = [ + migrations.AlterField( + model_name='answer', + name='created', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/projects/models.py b/projects/models.py index 31ef9fe..dabf112 100644 --- a/projects/models.py +++ b/projects/models.py @@ -1,10 +1,33 @@ from datetime import datetime from django.db import models +from django.utils import timezone from users.models import User from specializations.models import Specialization +class Realty(models.Model): + BUILDING_CLASSIFICATION_CHOICES = ( + + ) + TYPE_CONSTRUCTION_CHOICES = ( + + ) + name = models.CharField(max_length=255) + building_classification = models.CharField(max_length=50) + type_construction = models.CharField(max_length=50) + country = models.CharField(max_length=50) + city = models.CharField(max_length=50) + user = models.ForeignKey(User, related_name='realty') + + def __str__(self): + return self.name + + class Meta: + verbose_name = 'Объект' + verbose_name_plural = 'Объекты' + + class Project(models.Model): TYPE_WORK_CHOICES = ( ('1', 'проектирование'), @@ -21,6 +44,7 @@ class Project(models.Model): type_work = models.CharField(max_length=20, choices=TYPE_WORK_CHOICES, default='1') term_cost = models.BooleanField(default=False) secure_transaction = models.BooleanField(default=False) + realty = models.ForeignKey(Realty, null=True, related_name='projects') def __str__(self): return self.name @@ -30,6 +54,22 @@ class Project(models.Model): verbose_name_plural = 'Проекты' +class Order(models.Model): + project = models.OneToOneField(Project, related_name='order') + contractor = models.ForeignKey(User) + cost = models.DecimalField(max_digits=10, decimal_places=2) + term = models.IntegerField(default=1) + created = models.DateTimeField(default=timezone.now, editable=False) + status = models.BooleanField(default=False) + + def __str__(self): + return self.project.name + + class Meta: + verbose_name = 'Заказ' + verbose_name_plural = 'Заказы' + + class Answer(models.Model): COST_TYPE_CHOICES = ( ('rur', 'rur'), @@ -50,7 +90,7 @@ class Answer(models.Model): term_type = models.CharField(max_length=10, choices=TERM_TYPE_CHOICES, default='hour') project = models.ForeignKey(Project, related_name='answers') user = models.ForeignKey(User, related_name='answers') - created = models.DateTimeField(default=datetime.now()) + created = models.DateTimeField(default=timezone.now) def __str__(self): return self.text @@ -75,7 +115,7 @@ class Candidate(models.Model): class Portfolio(models.Model): name = models.CharField(max_length=255) description = models.TextField() - user = models.ForeignKey(User) + user = models.ForeignKey(User,related_name='portfolio') def __str__(self): return self.name @@ -95,3 +135,6 @@ class PortfolioPhoto(models.Model): # def __str__(self): # return self.img + + + diff --git a/projects/templates/projects/project_form.html b/projects/templates/projects/project_form.html index 0bda307..9e5d3d0 100644 --- a/projects/templates/projects/project_form.html +++ b/projects/templates/projects/project_form.html @@ -1,244 +1,245 @@ {% extends "base.html" %} -{#

Добавление

#} -{#
#} -{##} -{# {{ form.errors }}#} -{# {% csrf_token %}#} -{##} -{# {% for field in form %}#} -{#
#} -{# {{ field.label }}#} -{# {{ field }}#} -{#
#} -{# {% endfor %}#} -{# #} -{#
#} {% block content %} -
-

Новый заказ

-
-
-
-
-
-
Специализация проекта:
-
-
-
-
-
-
- -
-
- -
-
- -
-
- -
-
-
-
Бюджет
-
-
-
-
- - -
-
- -
-
- -

или по договоренности

-
-
-
- -

Сделать для исполнителей обязательным для заполнения поля цена и срок

-
-
-
Способ оплаты
-
-
-
- -

- Безопасная сделка (с резервированием бюджета) -

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia. -

-
-
- -

- Прямая оплата Исполнителю на его кошелек/счет -

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia. -

-
-
-
-
-

Расширенный поиск

- -
-
-
-
-
-
-
-
Выбор объекта:
-
Наименование:
-
Классификация здания:
-
Вид строительства:
-
-
-
- -
-
- -
-
- -
-
- -
-
-
-
Местоположение:
-
-
-
- -
-
- -
-
- -

Требуется допуск СРО

-
-
- - -
-
- -
+
+

Новый заказ

+
+ +
+ {% csrf_token %} + + + +
+ + + {{ form.errors }} +
+

Формирование заказа

+
+

Название заказа

+ + {{ form.name.errors }} +
+
+

Подробно опишите задание

+ +
+
+
+
+

Дополнительно

+
+
+{# #} +{#
#} +{# #} +{#

+ добавить файл (до 100 файлов)

#} +{#
#} +{# #} +{# #} +
    +
  • + Архитерурное 2.jpg + 7мб +
    +
  • +
+
+

Тип работы:

+
+
+ +

Проектирование

+
+ +
+ +

Техническое сопровождение

+
+
+ +
+
+
+
+
+
Специализация проекта:
+
+
+
+
+ + +
+
+ {{ form.specialization }} +{# #} +
+
+{# #} +
+
+{# #} +
+
+{# #} +
+
+
+
Бюджет
+
+
+
+
+ + +
+
+ +
+
+ +

или по договоренности

+
+
+
+ +

Сделать для исполнителей обязательным для заполнения поля цена и срок

+
+
+
Способ оплаты
+
+
+
+ +

+ Безопасная сделка (с резервированием бюджета) +

+

+ Текст +

+
+
+ +

+ Прямая оплата Исполнителю на его кошелек/счет +

+

+ Текст +

+
+
+
+
+

Расширенный поиск

+ +
+
+
+
+
+
+
+
Выбор объекта:
+
Наименование:
+
Классификация здания:
+
Вид строительства:
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
Местоположение:
+
+
+
+ +
+
+ +
+
+ +

Требуется допуск СРО

+
+
+ + {# #} + +
+
+ +
+ + + + + + {% endblock %} diff --git a/projects/templates/projects/test.html b/projects/templates/projects/test.html new file mode 100644 index 0000000..04bb4c4 --- /dev/null +++ b/projects/templates/projects/test.html @@ -0,0 +1,7 @@ +

Test page

+
{% csrf_token %} + {{ form.as_p }} + {{ realty_form.errors}} + {{ realty_form.as_p }} + +
diff --git a/projects/templates/projects/testport.html b/projects/templates/projects/testport.html new file mode 100644 index 0000000..b21ecc8 --- /dev/null +++ b/projects/templates/projects/testport.html @@ -0,0 +1,18 @@ +
{% csrf_token %} + {{ form.as_p }} + +
+ Photos + {{ portfolio_photo_form.management_form }} + {{ portfolio_photo_form.non_form_errors }} + {% for form in portfolio_photo_form %} + {{ form.id }} +
+ {{ form.img.errors }} + {{ form.img.label_tag }} + {{ form.img }} +
+ {% endfor %} +
+ +
diff --git a/projects/urls.py b/projects/urls.py index 8157f22..f99957f 100644 --- a/projects/urls.py +++ b/projects/urls.py @@ -1,13 +1,17 @@ from django.conf import urls # from django.contrib.auth.views import login, logout -from .views import ProjectListView, ProjectDetailView, ProjectCreateView , PortfolioCreateView +from .views import ProjectListView, ProjectDetailView, \ + ProjectCreateView, PortfolioCreateView,\ + TestProjectView, manage_articles app_name = 'projects' urlpatterns = [ urls.url(r'^$', ProjectListView.as_view(), name='list'), + urls.url(r'^porttest/$', manage_articles, name='portfolio'), urls.url(r'^create/$', ProjectCreateView.as_view(), name='project-create'), + urls.url(r'^test/$', TestProjectView.as_view(), name='project-test'), urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'), urls.url(r'(?P\d+)$', ProjectDetailView.as_view(), name='detail'), ] diff --git a/projects/views.py b/projects/views.py index 43d7711..4d170f6 100644 --- a/projects/views.py +++ b/projects/views.py @@ -5,7 +5,7 @@ from django.views.generic import ListView, DetailView, CreateView from django.views.generic.edit import FormMixin from .models import Project, Portfolio -from .forms import ProjectForm, PortfolioForm, AnswerForm +from .forms import ProjectForm, PortfolioForm, AnswerForm, RealtyForm class ProjectListView(ListView): @@ -74,3 +74,63 @@ class PortfolioCreateView(PermissionRequiredMixin, CreateView): success_url = '/projects/' # import code; code.interact(local=dict(globals(), **locals())) + + +class TestProjectView(CreateView): + 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) + # import code; code.interact(local=dict(globals(), **locals())) + + + 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}) diff --git a/specializations/models.py b/specializations/models.py index 66d176e..03f8c1e 100644 --- a/specializations/models.py +++ b/specializations/models.py @@ -10,6 +10,10 @@ class Specialization(MPTTModel): def __str__(self): return self.name + + class Meta: + verbose_name = 'Специализация' + verbose_name_plural = 'Специализации' class MPTTMeta: order_insertion_by = ['name'] diff --git a/specializations/templates/specialization/specialization_list.html b/specializations/templates/specialization/specialization_list.html deleted file mode 100644 index 2f64781..0000000 --- a/specializations/templates/specialization/specialization_list.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "base.html" %} -{% block content %} -

Специализации

- {% load mptt_tags %} -{# {% for spec in object_list %}#} -{#

{{ spec }}

#} -{# {% endfor %}#} -{##} -{# {% load mptt_tags %}#} -{#
    #} -{# {% recursetree object_list %}#} -{#
  • #} -{# {{ node.name }}#} -{# {% if not node.is_leaf_node %}#} -{#
      #} -{# {{ children }}#} -{#
    #} -{# {% endif %}#} -{#
  • #} -{# {% endrecursetree %}#} -{#
#} - {{ root }} - {% for ch in children %} -

{{ ch }}

- {% for ch1 in ch.get_children %} - {{ ch1 }} - {% endfor %} - {% endfor %} -{% endblock %} - diff --git a/specializations/templates/specializations/specialization_detail.html b/specializations/templates/specializations/specialization_detail.html new file mode 100644 index 0000000..aa5eb66 --- /dev/null +++ b/specializations/templates/specializations/specialization_detail.html @@ -0,0 +1,4 @@ +{% extends "base.html" %} +{% block content %} + {{ object }} +{% endblock %} diff --git a/specializations/templates/specializations/specialization_list.html b/specializations/templates/specializations/specialization_list.html new file mode 100644 index 0000000..c648e6f --- /dev/null +++ b/specializations/templates/specializations/specialization_list.html @@ -0,0 +1,67 @@ +{% extends "base.html" %} +{% block content %} +

Специализации

+ {% load mptt_tags %} + {# {% for spec in object_list %}#} + {#

{{ spec }}

#} + {# {% endfor %}#} + {##} + {% load mptt_tags %} + {#
    #} + {# {% recursetree object_list %}#} + {#
  • #} + {# {{ node.name }}#} + {# {% if not node.is_leaf_node %}#} + {#
      #} + {# {{ children }}#} + {#
    #} + {# {% endif %}#} + {#
  • #} + {# {% endrecursetree %}#} + {#
#} + {% for ch in children %} +

{{ ch }}

+ {% for ch1 in ch.get_children %} + {# {{ ch1 }}#} + {% endfor %} + {% endfor %} + {% block js_block %} + + {% endblock %} +{% endblock %} + diff --git a/specializations/urls.py b/specializations/urls.py index 03cbe75..28730fd 100644 --- a/specializations/urls.py +++ b/specializations/urls.py @@ -1,8 +1,12 @@ from django.conf import urls # from django.contrib.auth.views import login, logout -from .views import SpecListView +from .views import SpecListView, SpecChildrenDetailView, test_page, test_spec urlpatterns = [ urls.url(r'^$', SpecListView.as_view(), name='spec-list'), -] \ No newline at end of file + urls.url(r'^test/$', test_page), + urls.url(r'^spectest/$', test_spec), + urls.url(r'^children/(?P\d+)$', SpecChildrenDetailView.as_view(), name='spec-children'), + +] diff --git a/specializations/views.py b/specializations/views.py index 9535523..8661d18 100644 --- a/specializations/views.py +++ b/specializations/views.py @@ -1,5 +1,8 @@ from django.shortcuts import render -from django.views.generic import ListView +from django.views.generic import ListView, DetailView +from django.http import JsonResponse +from django.views.generic import TemplateView +from django.http import HttpResponse from .models import Specialization class SpecListView(ListView): @@ -12,3 +15,43 @@ class SpecListView(ListView): context['children'] = root.get_children() context['roots'] = Specialization.objects.root_nodes() return context + + +def test_page(request): + if request.method == 'POST': + if request.is_ajax(): + spec_id = request.POST.get('spec_id') + spec = Specialization.objects.get(pk=spec_id) + children = spec.get_children() + return JsonResponse({"hello": 'yes'}) + else: + return JsonResponse({"hello":"python"}) + + +def test_spec(request): + spec = Specialization.objects.get(pk=2) + # children = spec.get_children() + return HttpResponse(request, {'mm':'hello'}) + +class SpecChildrenDetailView(DetailView): + model = Specialization + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + return context + + +class JSONResponseMixin(object): + def render_to_json_response(self, context, **response_kwargs): + return JsonResponse( + self.get_data(context), + **response_kwargs + ) + + def get_data(self, context): + return context + + +class JSONView(JSONResponseMixin, TemplateView): + def render_to_response(self, context, **response_kwargs): + return self.render_to_json_response(context, **response_kwargs) diff --git a/templates/base.html b/templates/base.html index 16a19c9..418b85d 100644 --- a/templates/base.html +++ b/templates/base.html @@ -123,5 +123,6 @@ +{% block js_block %} {% endblock %} diff --git a/users/migrations/0006_auto_20160525_0948.py b/users/migrations/0006_auto_20160525_0948.py new file mode 100644 index 0000000..79ef51b --- /dev/null +++ b/users/migrations/0006_auto_20160525_0948.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 09:48 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0005_auto_20160524_1054'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='created', + field=models.DateTimeField(default=datetime.datetime(2016, 5, 25, 9, 48, 35, 257077)), + ), + ] diff --git a/users/migrations/0007_auto_20160525_1526.py b/users/migrations/0007_auto_20160525_1526.py new file mode 100644 index 0000000..f3c493a --- /dev/null +++ b/users/migrations/0007_auto_20160525_1526.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 15:26 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0006_auto_20160525_0948'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='created', + field=models.DateTimeField(default=datetime.datetime(2016, 5, 25, 15, 26, 33, 142994)), + ), + ] diff --git a/users/migrations/0008_auto_20160525_1527.py b/users/migrations/0008_auto_20160525_1527.py new file mode 100644 index 0000000..cd55854 --- /dev/null +++ b/users/migrations/0008_auto_20160525_1527.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-25 15:27 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0007_auto_20160525_1526'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='created', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/users/models.py b/users/models.py index 3fe0f86..ca17bb3 100644 --- a/users/models.py +++ b/users/models.py @@ -1,5 +1,6 @@ from datetime import datetime from django.db import models +from django.utils import timezone from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, AbstractUser, Group, PermissionsMixin class UserManager(BaseUserManager): @@ -19,14 +20,14 @@ class UserManager(BaseUserManager): return user -class PerformUserManager(models.Manager): +class ContractorUserManager(models.Manager): def get_queryset(self): - return super(PerformUserManager, self).get_queryset().filter(groups__name='Исполнитель') + return super(ContractorUserManager, self).get_queryset().filter(groups__name='Исполнители') class CustomerUserManager(models.Manager): def get_queryset(self): - return super(CustomerUserManager, self).get_queryset().filter(groups__name='Заказчик') + return super(CustomerUserManager, self).get_queryset().filter(groups__name='Заказчики') class User(AbstractBaseUser, PermissionsMixin): @@ -34,7 +35,7 @@ class User(AbstractBaseUser, PermissionsMixin): last_name = models.CharField(max_length=255, blank=True) email = models.EmailField(max_length=255, unique=True, db_index=True) is_active = models.BooleanField(default=True) - created = models.DateTimeField(default=datetime.now()) + created = models.DateTimeField(default=timezone.now) @property def is_staff(self): @@ -52,7 +53,7 @@ class User(AbstractBaseUser, PermissionsMixin): USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] objects = UserManager() - perform_objects = PerformUserManager() + contractor_objects = ContractorUserManager() customers_objects = CustomerUserManager() class Meta: diff --git a/users/templates/users/contractor.html b/users/templates/users/contractor.html new file mode 100644 index 0000000..efad0e5 --- /dev/null +++ b/users/templates/users/contractor.html @@ -0,0 +1,577 @@ +{% extends "base.html" %} + + +{% block content %} +

{{ user }}

+

{{ user.groups.all }}

+ +
+
+
+ +
+
+

+ Иванов Петр Иванович [ivanov_petr] +

+

Россия, Москва

+ +
Свободен
+ показать контакты +
+
+
+

+ Специализации: +

+
+ Интерьеры + 2-й +
+
+ Визуализация/3D + 45-й +
+
+ Экстерьеры + 10-й +
+
+ Архитектура + 3-й +
+
+ 3D Моделирование + 100-й +
+
+
+ +
+ +
+
+ +
+ {% for p in user.portfolio.all %} +
+
+
+
+
+
+
+

{{ p.name }}

+
+
+ +
+
+ +
+
+
+
+ {% endfor %} +
+ +
+
+ +
+
+
+
+
+
+
+
+ 35 000 +
+
+
+
+

+ Визуализация + загородного + дома 1500m2 +

+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+ 35 000 +
+
+
+
+

+ Визуализация + загородного + дома 1500m2 +

+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+ 35 000 +
+
+
+
+

+ Визуализация + загородного + дома 1500m2 +

+
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+ +

Загрузить резюме

+
+
+ +

Загрузить файл

+
+
+
+
+
+ profile-image +
+
+
+
+

Иванов Петр Сергеевич

+ скачать резюме +

+ Мужчина, 24 года, 14 февраля 1991 +

+
+
+
    +
  • brilliantov.me
  • +
  • alex@brilliantov.me
  • +
  • +7 968 009 19 99
  • +
  • Россия, Москва
  • +
+
+
+
+

+ Специализации: +

+
+ Интерьеры + 2-й +
+
+ Визуализация/3D + 45-й +
+
+
+
+
+
+
+
+
+

Что я умею?

+ + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut perspiciatis ducimus ullam saepe sed! Architecto sit, repellendus illo ut odio amet facilis distinctio veniam nulla consequatur a sequi deleniti aperiam! + +
+
+

Что я умею?

+ + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut perspiciatis ducimus ullam saepe sed! Architecto sit, repellendus illo ut odio amet facilis distinctio veniam nulla consequatur a sequi deleniti aperiam! + +
+
+

Что я умею?

+ + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut perspiciatis ducimus ullam saepe sed! Architecto sit, repellendus illo ut odio amet facilis distinctio veniam nulla consequatur a sequi deleniti aperiam! + +
+
+
+
+

Дипломы / Сертификаты

+
+ +

Загрузить файл

+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+

Допуск СРО

+
+ +

Загрузить файл

+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. +

+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+

+ Иванов Петр Иванович +

+ + Безопасная сделка + + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar tempor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus sapien nunc eget odio. +

+
+
+
+
+
+ +
+
+{% endblock %} diff --git a/users/templates/users/customer.html b/users/templates/users/customer.html new file mode 100644 index 0000000..4f080b2 --- /dev/null +++ b/users/templates/users/customer.html @@ -0,0 +1,4 @@ +{% extends 'base.html' %} +{% block content %} +

Заказчик

+{% endblock %} diff --git a/users/urls.py b/users/urls.py index ac04e3b..43ef580 100755 --- a/users/urls.py +++ b/users/urls.py @@ -1,12 +1,13 @@ from django.conf import urls from django.contrib.auth.views import login, logout -from .views import UserListView, UserDetailView, UserInfoListView - +from .views import UserListView, UserDetailView, UserInfoListView, UserView urlpatterns = [ urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'), # urls.url(r'^login/?$', login, {'template_name': 'users/login.html'}), # urls.url(r'^logout/?$', logout), urls.url(r'^$', UserListView.as_view(), name='users_list'), urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'), + urls.url(r'^contractor/(?P\d+)$$', UserView.as_view(), name='user_view'), + urls.url(r'^(?P\d+)$', UserView.as_view(), name='user_view'), ] diff --git a/users/views.py b/users/views.py index 163d282..da84eff 100644 --- a/users/views.py +++ b/users/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render from django.contrib.auth.models import Group -from django.views.generic import ListView, DetailView +from django.views.generic import ListView, DetailView, View, UpdateView from .models import User @@ -23,3 +23,33 @@ class UserInfoListView(ListView): class UserDetailView(DetailView): model = User + + + +class UserView(View): + template_name = 'users/contractor.html' + + def get(self, request, pk): + user = User.objects.get(pk=pk) + user_group = user.groups.all().first() + if 'Заказчики' in user_group.name: + self.template_name = 'users/customer.html' + + return render(request, self.template_name, {'user': user}) + # import code; code.interact(local=dict(globals(), **locals())) + + +class UserUpdateView(UpdateView): + model = User + +# class ContractorDetailView(DetailView): +# model = User +# template_name = 'users/contractor.html' +# +# def get_queryset(self): +# qs = super().get_queryset() +# return User.contractor_objects.get(self.pk) + + +class CustomerDetailView(DetailView): + model = User