add spec dropdown

remotes/origin/setup
Mukhtar 10 years ago
parent e0547daaac
commit 9dccdd1a73
  1. 3
      .gitignore
  2. 2
      archilance/settings/dev.py
  3. 2
      archilance/urls.py
  4. 5
      assets/js/main.js
  5. BIN
      media/projects/portfolio/gal.jpg
  6. BIN
      media/projects/portfolio/meet-the-team-image-2.jpg
  7. 14
      projects/admin.py
  8. 30
      projects/forms.py
  9. 21
      projects/migrations/0007_auto_20160525_0948.py
  10. 41
      projects/migrations/0008_auto_20160525_1044.py
  11. 41
      projects/migrations/0009_auto_20160525_1524.py
  12. 22
      projects/migrations/0010_auto_20160525_1525.py
  13. 21
      projects/migrations/0011_auto_20160525_1526.py
  14. 47
      projects/models.py
  15. 477
      projects/templates/projects/project_form.html
  16. 7
      projects/templates/projects/test.html
  17. 18
      projects/templates/projects/testport.html
  18. 6
      projects/urls.py
  19. 62
      projects/views.py
  20. 4
      specializations/models.py
  21. 30
      specializations/templates/specialization/specialization_list.html
  22. 4
      specializations/templates/specializations/specialization_detail.html
  23. 67
      specializations/templates/specializations/specialization_list.html
  24. 8
      specializations/urls.py
  25. 45
      specializations/views.py
  26. 1
      templates/base.html
  27. 21
      users/migrations/0006_auto_20160525_0948.py
  28. 21
      users/migrations/0007_auto_20160525_1526.py
  29. 21
      users/migrations/0008_auto_20160525_1527.py
  30. 11
      users/models.py
  31. 577
      users/templates/users/contractor.html
  32. 4
      users/templates/users/customer.html
  33. 5
      users/urls.py
  34. 32
      users/views.py

3
.gitignore vendored

@ -1,4 +1,7 @@
*.pyc *.pyc
.idea/ .idea/
env/ env/
.ar/
ar/

@ -1,5 +1,5 @@
from .base import * from .base import *
# INSTALLED_APPS += ['debug_toolbar'] INSTALLED_APPS += ['debug_toolbar']
AUTH_PASSWORD_VALIDATORS = [] AUTH_PASSWORD_VALIDATORS = []

@ -11,7 +11,7 @@ urlpatterns = [
url(r'^$', HomeTemplateView.as_view()), url(r'^$', HomeTemplateView.as_view()),
url(r'^test/$', TemplateView.as_view(template_name='test.html'), name='test'), url(r'^test/$', TemplateView.as_view(template_name='test.html'), name='test'),
url(r'^projects/', include('projects.urls')), 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('registration.backends.default.urls')),
url(r'^users/', include('users.urls')), url(r'^users/', include('users.urls')),
url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls),

@ -3,7 +3,8 @@ $(document).ready(function(){
$('.messd:first').addClass('mesAct'); $('.messd:first').addClass('mesAct');
$('.orderBlock:first').addClass('orAct'); $('.orderBlock:first').addClass('orAct');
$('.resButtonF1').click(function(){ $('.resButtonF1').click(function(e){
e.preventDefault();
$('.slideRes').toggleClass('activeSlide'); $('.slideRes').toggleClass('activeSlide');
if($('.slideRes').hasClass('activeSlide')) { if($('.slideRes').hasClass('activeSlide')) {
$('.slideRes').slideUp(300); $('.slideRes').slideUp(300);
@ -49,4 +50,4 @@ $(document).ready(function(){
width: '117px' width: '117px'
}); });
}); });

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

@ -1,8 +1,20 @@
from django.contrib import admin 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(Project)
admin.site.register(Answer) admin.site.register(Answer)
admin.site.register(Portfolio) admin.site.register(Portfolio)
admin.site.register(PortfolioPhoto) admin.site.register(PortfolioPhoto)
admin.site.register(Realty)
admin.site.register(Order)
admin.site.register(Candidate)

@ -1,18 +1,39 @@
from django.forms import ModelForm, HiddenInput from django import forms
from .models import Project, Portfolio, Answer 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 ProjectForm(ModelForm):
class Meta: class Meta:
model = Project model = Project
fields = ( fields = (
'name', 'name',
'price', 'price',
'specialization', 'specialization',
'text', '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 PortfolioForm(ModelForm):
class Meta: class Meta:
model = Portfolio model = Portfolio
@ -39,3 +60,6 @@ class AnswerForm(ModelForm):
widgets = { widgets = {
'project': HiddenInput(), 'project': HiddenInput(),
} }
from django.forms.models import inlineformset_factory
PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',))

@ -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)),
),
]

@ -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'),
),
]

@ -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)),
),
]

@ -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)),
),
]

@ -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),
),
]

@ -1,10 +1,33 @@
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from django.utils import timezone
from users.models import User from users.models import User
from specializations.models import Specialization 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): class Project(models.Model):
TYPE_WORK_CHOICES = ( TYPE_WORK_CHOICES = (
('1', 'проектирование'), ('1', 'проектирование'),
@ -21,6 +44,7 @@ class Project(models.Model):
type_work = models.CharField(max_length=20, choices=TYPE_WORK_CHOICES, default='1') type_work = models.CharField(max_length=20, choices=TYPE_WORK_CHOICES, default='1')
term_cost = models.BooleanField(default=False) term_cost = models.BooleanField(default=False)
secure_transaction = models.BooleanField(default=False) secure_transaction = models.BooleanField(default=False)
realty = models.ForeignKey(Realty, null=True, related_name='projects')
def __str__(self): def __str__(self):
return self.name return self.name
@ -30,6 +54,22 @@ class Project(models.Model):
verbose_name_plural = 'Проекты' 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): class Answer(models.Model):
COST_TYPE_CHOICES = ( COST_TYPE_CHOICES = (
('rur', 'rur'), ('rur', 'rur'),
@ -50,7 +90,7 @@ class Answer(models.Model):
term_type = models.CharField(max_length=10, choices=TERM_TYPE_CHOICES, default='hour') term_type = models.CharField(max_length=10, choices=TERM_TYPE_CHOICES, default='hour')
project = models.ForeignKey(Project, related_name='answers') project = models.ForeignKey(Project, related_name='answers')
user = models.ForeignKey(User, 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): def __str__(self):
return self.text return self.text
@ -75,7 +115,7 @@ class Candidate(models.Model):
class Portfolio(models.Model): class Portfolio(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
description = models.TextField() description = models.TextField()
user = models.ForeignKey(User) user = models.ForeignKey(User,related_name='portfolio')
def __str__(self): def __str__(self):
return self.name return self.name
@ -95,3 +135,6 @@ class PortfolioPhoto(models.Model):
# def __str__(self): # def __str__(self):
# return self.img # return self.img

@ -1,244 +1,245 @@
{% extends "base.html" %} {% extends "base.html" %}
{# <h1>Добавление</h1>#}
{# <form method="post" action="">#}
{##}
{# {{ form.errors }}#}
{# {% csrf_token %}#}
{##}
{# {% for field in form %}#}
{# <div class="row">#}
{# {{ field.label }}#}
{# {{ field }}#}
{# </div>#}
{# {% endfor %}#}
{# <input type="submit" value="Создать" />#}
{# </form>#}
{% block content %} {% block content %}
<div class="col-lg-12 allProjects"> <div class="col-lg-12 allProjects">
<p class="titleScore">Новый заказ</p> <p class="titleScore">Новый заказ</p>
</div> </div>
<div class="chatBlock new-rass new-rass2 disTab">
{{ form.errors }} <form method="post">
<form action="" method="post"> {% csrf_token %} {% csrf_token %}
<div class="col-lg-9">
<p class="new-pp new-pp3">Формирование заказа</p>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа</p> <div class="chatBlock new-rass new-rass2 disTab">
<input type="text" class="box-sizing" name="{{ form.name.name }}" />
</div> {{ form.errors }}
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="col-lg-9">
<p>Подробно опишите задание</p> <p class="new-pp new-pp3">Формирование заказа</p>
<textarea name="{{ form.text.name }}" id="text-new"></textarea> <div class="textAreaBlock2 text-nn box-sizing disTab">
</div> <p>Название заказа</p>
</div> <input type="text" class="box-sizing" name="{{ form.name.name }}"/>
<div class="col-lg-3 wrChat1"> {{ form.name.errors }}
<div class="messageBlock box-sizing disTab"> </div>
<p>Дополнительно</p> <div class="textAreaBlock2 text-nn box-sizing disTab">
</div> <p>Подробно опишите задание</p>
<div class="col-lg-12 documentsChat"> <textarea name="{{ form.text.name }}" id="text-new"></textarea>
<form action="" method="post"> </div>
<div class="upload"> </div>
<input type="file" name="upload"/> <div class="col-lg-3 wrChat1">
<p>+ добавить файл (до 100 файлов)</p> <div class="messageBlock box-sizing disTab">
</div> <p>Дополнительно</p>
</form> </div>
<ul class="list-new-new"> <div class="col-lg-12 documentsChat">
<li> {# <form action="" method="post">#}
Архитерурное 2.jpg {# <div class="upload">#}
<span>7мб</span> {# <input type="file" name="upload"/>#}
<div></div> {# <p>+ добавить файл (до 100 файлов)</p>#}
</li> {# </div>#}
<li> {# <input type="submit" value="Submit" />#}
Архитерурное 2.jpg {# </form>#}
<span>7мб</span> <ul class="list-new-new">
<div></div> <li>
</li> Архитерурное 2.jpg
</ul> <span>7мб</span>
</div> <div></div>
<p class="type-work">Тип работы:</p> </li>
<div class="mail-block type-work-inset"> </ul>
<div class="inset-mb"> </div>
<label><input type="radio" name="radio1"><span></span></label> <p class="type-work">Тип работы:</p>
<p>Проектирование</p> <div class="mail-block type-work-inset">
</div> <div class="inset-mb">
<div class="inset-mb"> <label><input type="radio" value="1" name="{{ form.type_work.name }}"><span></span></label>
<label><input type="radio" name="radio1"><span></span></label> <p>Проектирование</p>
<p>Техническое сопровождение</p> </div>
</div>
</div> <div class="inset-mb">
<div class="textAreaBlock2 box-sizing disTab"> <label><input type="radio" value="2" name="{{ form.type_work.name }}"><span></span></label>
<a href="javascriptt:void(0)" class="new-link new-lw">+ Добавить раздел</a> <p>Техническое сопровождение</p>
</div> </div>
</div> </div>
</div> <div class="textAreaBlock2 box-sizing disTab">
<div class="col-lg-12 new-filter"> <a href="javascriptt:void(0)" class="new-link new-lw">+ Добавить раздел</a>
<div class="filter clearfix"> </div>
<div class="titleF1 disTab"> </div>
<div class="col-lg-3">Специализация проекта:</div> </div>
<div class="col-lg-3"></div> <div class="col-lg-12 new-filter">
<div class="col-lg-3"></div> <div class="filter clearfix">
<div class="col-lg-3"></div> <div class="titleF1 disTab">
</div> <div class="col-lg-3">Специализация проекта:</div>
<div class="polsF1 disTab"> <div class="col-lg-3"></div>
<div class="col-lg-3"> <div class="col-lg-3"></div>
<select class="selectpicker"> <div class="col-lg-3"></div>
<option>Mustard</option> </div>
<option>Ketchup</option>
<option>Relish</option>
</select> <div class="polsF1 disTab">
</div> <div class="col-lg-3">
<div class="col-lg-3"> {{ form.specialization }}
<select class="selectpicker"> {# <select class="selectpicker" name="{{ form.specialization.name }}">#}
<option>Mustard</option> {# <option>Mustard</option>#}
<option>Ketchup</option> {# <option>Ketchup</option>#}
<option>Relish</option> {# <option>Relish</option>#}
</select> {# </select>#}
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {# <select class="selectpicker">#}
<option>Mustard</option> {# <option>Mustard</option>#}
<option>Ketchup</option> {# <option>Ketchup</option>#}
<option>Relish</option> {# <option>Relish</option>#}
</select> {# </select>#}
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {# <select class="selectpicker">#}
<option>Mustard</option> {# <option>Mustard</option>#}
<option>Ketchup</option> {# <option>Ketchup</option>#}
<option>Relish</option> {# <option>Relish</option>#}
</select> {# </select>#}
</div> </div>
</div> <div class="col-lg-3">
<div class="titleF1 titleF2 disTab"> {# <select class="selectpicker">#}
<div class="col-lg-4">Бюджет</div> {# <option>Mustard</option>#}
<div class="col-lg-8"></div> {# <option>Ketchup</option>#}
</div> {# <option>Relish</option>#}
<div class="searchF1 polsF1 polsFF"> {# </select>#}
<div class="col-lg-4"> </div>
<input type="text" class="box-sizing surr"> </div>
<select class="selectpicker2 valul"> <div class="titleF1 titleF2 disTab">
<option>&#36;</option> <div class="col-lg-4">Бюджет</div>
<option>&#36;</option> <div class="col-lg-8"></div>
<option>&#36;</option> </div>
</select> <div class="searchF1 polsF1 polsFF">
</div> <div class="col-lg-4">
<div class="col-lg-3"> <input type="text" name="{{ form.price.name }}" class="box-sizing surr">
<select class="selectpicker"> <select class="selectpicker2 valul">
<option>За проект</option> <option>&#36;</option>
<option>Ketchup</option> <option>&#36;</option>
<option>Relish</option> <option>&#36;</option>
</select> </select>
</div> </div>
<div class="col-lg-5 dog-new"> <div class="col-lg-3">
<label><input type="checkbox" name="dogovor"><span></span></label> <select class="selectpicker">
<p>или по договоренности</p> <option>За проект</option>
</div> <option>Ketchup</option>
</div> <option>Relish</option>
<div class="searchF1 polsF1 polsFF make-new"> </select>
<label><input type="checkbox" name="dogovor"><span></span></label> </div>
<p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p> <div class="col-lg-5 dog-new">
</div> <label><input type="checkbox" name="dogovor"><span></span></label>
<div class="titleF1 titleF2 disTab"> <p>или по договоренности</p>
<div class="col-lg-12">Способ оплаты</div> </div>
</div> </div>
<div class="searchF1 polsF1 polsFF radio-afer"> <div class="searchF1 polsF1 polsFF make-new">
<div class="col-lg-6"> <label><input type="checkbox" name="dogovor"><span></span></label>
<label><input type="radio" name="afer"><span></span></label> <p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p>
<p class="text-afer"> </div>
Безопасная сделка (с резервированием бюджета) <div class="titleF1 titleF2 disTab">
</p> <div class="col-lg-12">Способ оплаты</div>
<p class="des-afer"> </div>
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. <div class="searchF1 polsF1 polsFF radio-afer">
</p> <div class="col-lg-6">
</div> <label><input type="radio" name="afer"><span></span></label>
<div class="col-lg-6"> <p class="text-afer">
<label><input type="radio" name="afer"><span></span></label> Безопасная сделка (с резервированием бюджета)
<p class="text-afer"> </p>
Прямая оплата Исполнителю на его кошелек/счет <p class="des-afer">
</p> Текст
<p class="des-afer"> </p>
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. </div>
</p> <div class="col-lg-6">
</div> <label><input type="radio" name="afer"><span></span></label>
</div> <p class="text-afer">
<div class="resSearchF1"> Прямая оплата Исполнителю на его кошелек/счет
<div class="col-lg-3"> </p>
<p class="titleResF1">Расширенный поиск</p> <p class="des-afer">
<button class="resButtonF1"> Текст
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span> </p>
</button> </div>
</div> </div>
<div class="col-lg-9"> <div class="resSearchF1">
<div class="borderS1"></div> <div class="col-lg-3">
</div> <p class="titleResF1">Расширенный поиск</p>
</div> <button class="resButtonF1">
<div class="slideRes disTab activeSlide"> <span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
<div class="titleF1 disTab"> </button>
<div class="col-lg-3">Выбор объекта:</div> </div>
<div class="col-lg-3">Наименование:</div> <div class="col-lg-9">
<div class="col-lg-3">Классификация здания:</div> <div class="borderS1"></div>
<div class="col-lg-3">Вид строительства:</div> </div>
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="slideRes disTab activeSlide">
<div class="col-lg-3"> <div class="titleF1 disTab">
<select class="selectpicker"> <div class="col-lg-3">Выбор объекта:</div>
<option>Mustard</option> <div class="col-lg-3">Наименование:</div>
<option>Ketchup</option> <div class="col-lg-3">Классификация здания:</div>
<option>Relish</option> <div class="col-lg-3">Вид строительства:</div>
</select> </div>
</div> <div class="polsF1 polsF2 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<input type="text" class="box-sizing surr surr2"> <select class="selectpicker">
</div> <option>Mustard</option>
<div class="col-lg-3"> <option>Ketchup</option>
<select class="selectpicker"> <option>Relish</option>
<option>Mustard</option> </select>
<option>Ketchup</option> </div>
<option>Relish</option> <div class="col-lg-3">
</select> <input type="text" class="box-sizing surr surr2">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Mustard</option> <option>Mustard</option>
<option>Ketchup</option> <option>Ketchup</option>
<option>Relish</option> <option>Relish</option>
</select> </select>
</div> </div>
</div> <div class="col-lg-3">
<div class="titleF1 disTab"> <select class="selectpicker">
<div class="col-lg-12">Местоположение:</div> <option>Mustard</option>
</div> <option>Ketchup</option>
<div class="polsF1 polsF2 disTab"> <option>Relish</option>
<div class="col-lg-3"> </select>
<select class="selectpicker"> </div>
<option>Страна</option> </div>
<option>Ketchup</option> <div class="titleF1 disTab">
<option>Relish</option> <div class="col-lg-12">Местоположение:</div>
</select> </div>
</div> <div class="polsF1 polsF2 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Город</option> <option>Страна</option>
<option>Ketchup</option> <option>Ketchup</option>
<option>Relish</option> <option>Relish</option>
</select> </select>
</div> </div>
<div class="col-lg-6 make-new"> <div class="col-lg-3">
<label><input type="checkbox" name="dogovor"><span></span></label> <select class="selectpicker">
<p>Требуется допуск СРО</p> <option>Город</option>
</div> <option>Ketchup</option>
</div> <option>Relish</option>
<div class="searchF1 polsF1 polsFF links-filter"> </select>
<a href="javascript:void(0)">Разместить проект</a> </div>
<a href="javascript:void(0)">Сохранить</a> <div class="col-lg-6 make-new">
</div> <label><input type="checkbox" name="dogovor"><span></span></label>
</form> <p>Требуется допуск СРО</p>
</div> </div>
</div> </div>
</div> {# <div class="searchF1 polsF1 polsFF links-filter">#}
{# <a href="javascript:void(0)">Разместить проект</a>#}
{# <a href="javascript:void(0)">Сохранить</a>#}
{##}
{# </div>#}
</div>
</div>
</div>
<input type="submit" value="Submit" />
</form>
{% endblock %} {% endblock %}

@ -0,0 +1,7 @@
<h1>Test page</h1>
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
{{ realty_form.errors}}
{{ realty_form.as_p }}
<input type="submit" value="Send message" />
</form>

@ -0,0 +1,18 @@
<form method="post" action="">{% csrf_token %}
{{ form.as_p }}
<fieldset>
<legend>Photos</legend>
{{ portfolio_photo_form.management_form }}
{{ portfolio_photo_form.non_form_errors }}
{% for form in portfolio_photo_form %}
{{ form.id }}
<div class="inline {{ portfolio_photo_form.prefix }}">
{{ form.img.errors }}
{{ form.img.label_tag }}
{{ form.img }}
</div>
{% endfor %}
</fieldset>
<input type="submit" value="Add portfolio" class="submit" />
</form>

@ -1,13 +1,17 @@
from django.conf import urls from django.conf import urls
# from django.contrib.auth.views import login, logout # 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' app_name = 'projects'
urlpatterns = [ urlpatterns = [
urls.url(r'^$', ProjectListView.as_view(), name='list'), 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'^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'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),
urls.url(r'(?P<pk>\d+)$', ProjectDetailView.as_view(), name='detail'), urls.url(r'(?P<pk>\d+)$', ProjectDetailView.as_view(), name='detail'),
] ]

@ -5,7 +5,7 @@ from django.views.generic import ListView, DetailView, CreateView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from .models import Project, Portfolio from .models import Project, Portfolio
from .forms import ProjectForm, PortfolioForm, AnswerForm from .forms import ProjectForm, PortfolioForm, AnswerForm, RealtyForm
class ProjectListView(ListView): class ProjectListView(ListView):
@ -74,3 +74,63 @@ class PortfolioCreateView(PermissionRequiredMixin, CreateView):
success_url = '/projects/' success_url = '/projects/'
# import code; code.interact(local=dict(globals(), **locals())) # 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})

@ -10,6 +10,10 @@ class Specialization(MPTTModel):
def __str__(self): def __str__(self):
return self.name return self.name
class Meta:
verbose_name = 'Специализация'
verbose_name_plural = 'Специализации'
class MPTTMeta: class MPTTMeta:
order_insertion_by = ['name'] order_insertion_by = ['name']

@ -1,30 +0,0 @@
{% extends "base.html" %}
{% block content %}
<h1>Специализации</h1>
{% load mptt_tags %}
{# {% for spec in object_list %}#}
{# <h4>{{ spec }}</h4>#}
{# {% endfor %}#}
{##}
{# {% load mptt_tags %}#}
{#<ul>#}
{# {% recursetree object_list %}#}
{# <li>#}
{# {{ node.name }}#}
{# {% if not node.is_leaf_node %}#}
{# <ul class="children">#}
{# {{ children }}#}
{# </ul>#}
{# {% endif %}#}
{# </li>#}
{# {% endrecursetree %}#}
{#</ul>#}
{{ root }}
{% for ch in children %}
<h3>{{ ch }}</h3>
{% for ch1 in ch.get_children %}
{{ ch1 }}
{% endfor %}
{% endfor %}
{% endblock %}

@ -0,0 +1,4 @@
{% extends "base.html" %}
{% block content %}
{{ object }}
{% endblock %}

@ -0,0 +1,67 @@
{% extends "base.html" %}
{% block content %}
<h1>Специализации</h1>
{% load mptt_tags %}
{# {% for spec in object_list %}#}
{# <h4>{{ spec }}</h4>#}
{# {% endfor %}#}
{##}
{% load mptt_tags %}
{#<ul>#}
{# {% recursetree object_list %}#}
{# <li>#}
{# {{ node.name }}#}
{# {% if not node.is_leaf_node %}#}
{# <ul class="children">#}
{# {{ children }}#}
{# </ul>#}
{# {% endif %}#}
{# </li>#}
{# {% endrecursetree %}#}
{#</ul>#}
{% for ch in children %}
<p class="spec_list" data-id="{{ ch.id }}"> {{ ch }} </p>
{% for ch1 in ch.get_children %}
{# {{ ch1 }}#}
{% endfor %}
{% endfor %}
{% block js_block %}
<script type="text/javascript">
$(function () {
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$('p.spec_list').on('click', function (e) {
e.preventDefault();
var csrftoken = getCookie('csrftoken');
var spec_id = $(this).attr('data-id');
$.ajax({
url:'/specializations/test/',
type:'POST',
data:{csrfmiddlewaretoken : csrftoken, spec_id: spec_id},
dataType:'json',
success:function(json){
alert(json.hello);
console.log(json);
}
});
});
});
</script>
{% endblock %}
{% endblock %}

@ -1,8 +1,12 @@
from django.conf import urls from django.conf import urls
# from django.contrib.auth.views import login, logout # from django.contrib.auth.views import login, logout
from .views import SpecListView from .views import SpecListView, SpecChildrenDetailView, test_page, test_spec
urlpatterns = [ urlpatterns = [
urls.url(r'^$', SpecListView.as_view(), name='spec-list'), urls.url(r'^$', SpecListView.as_view(), name='spec-list'),
] urls.url(r'^test/$', test_page),
urls.url(r'^spectest/$', test_spec),
urls.url(r'^children/(?P<pk>\d+)$', SpecChildrenDetailView.as_view(), name='spec-children'),
]

@ -1,5 +1,8 @@
from django.shortcuts import render 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 from .models import Specialization
class SpecListView(ListView): class SpecListView(ListView):
@ -12,3 +15,43 @@ class SpecListView(ListView):
context['children'] = root.get_children() context['children'] = root.get_children()
context['roots'] = Specialization.objects.root_nodes() context['roots'] = Specialization.objects.root_nodes()
return context 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)

@ -123,5 +123,6 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/i18n/defaults-*.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/i18n/defaults-*.min.js"></script>
<script src="{% static 'js/main.js' %}"></script> <script src="{% static 'js/main.js' %}"></script>
{% block js_block %} {% endblock %}
</body> </body>
</html> </html>

@ -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)),
),
]

@ -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)),
),
]

@ -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),
),
]

@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from django.utils import timezone
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, AbstractUser, Group, PermissionsMixin from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, AbstractUser, Group, PermissionsMixin
class UserManager(BaseUserManager): class UserManager(BaseUserManager):
@ -19,14 +20,14 @@ class UserManager(BaseUserManager):
return user return user
class PerformUserManager(models.Manager): class ContractorUserManager(models.Manager):
def get_queryset(self): 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): class CustomerUserManager(models.Manager):
def get_queryset(self): 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): class User(AbstractBaseUser, PermissionsMixin):
@ -34,7 +35,7 @@ class User(AbstractBaseUser, PermissionsMixin):
last_name = models.CharField(max_length=255, blank=True) last_name = models.CharField(max_length=255, blank=True)
email = models.EmailField(max_length=255, unique=True, db_index=True) email = models.EmailField(max_length=255, unique=True, db_index=True)
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)
created = models.DateTimeField(default=datetime.now()) created = models.DateTimeField(default=timezone.now)
@property @property
def is_staff(self): def is_staff(self):
@ -52,7 +53,7 @@ class User(AbstractBaseUser, PermissionsMixin):
USERNAME_FIELD = 'email' USERNAME_FIELD = 'email'
REQUIRED_FIELDS = [] REQUIRED_FIELDS = []
objects = UserManager() objects = UserManager()
perform_objects = PerformUserManager() contractor_objects = ContractorUserManager()
customers_objects = CustomerUserManager() customers_objects = CustomerUserManager()
class Meta: class Meta:

@ -0,0 +1,577 @@
{% extends "base.html" %}
{% block content %}
<h1>{{ user }}</h1>
<h2>{{ user.groups.all }}</h2>
<div class="container mainScore mainBlock2">
<div class="row">
<div class="col-lg-12">
<div class="col-lg-3 divCol3">
<div class="avatar">
<div class="avatarInset">
<img src="img/profile.jpg" alt="profile-image">
</div>
</div>
<div class="menuUser disTab">
<ul>
<li class="icon_um1">
<a href="javascript:void(0)">
редактировать профиль
</a>
<span></span>
</li>
<li class="icon_um2">
<a href="javascript:void(0)">
пригласить в группу
</a>
<span></span>
</li>
<li class="icon_um3">
<a href="javascript:void(0)">
написать сообщение
</a>
<span></span>
</li>
<li class="icon_um4">
<a href="javascript:void(0)">
предложить заказ
</a>
<span></span>
</li>
</ul>
</div>
</div>
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="nameUser">
Иванов Петр Иванович [ivanov_petr]
</p>
<p class="cityUser">Россия, Москва</p>
<p class="navv">На сайте 8 лет и 3 месяца</p>
<div class="statusUser">Свободен</div>
<a href="javascript:void(0)" class="showCon">показать контакты</a>
</div>
<div class="col-lg-4">
<div class="dashedCol4">
<p class="specUser">
Специализации:
</p>
<div class="insetSpec">
<span>Интерьеры</span>
<span>2-й</span>
</div>
<div class="insetSpec">
<span>Визуализация/3D</span>
<span>45-й</span>
</div>
<div class="insetSpec">
<span>Экстерьеры</span>
<span>10-й</span>
</div>
<div class="insetSpec">
<span>Архитектура</span>
<span>3-й</span>
</div>
<div class="insetSpec">
<span>3D Моделирование</span>
<span>100-й</span>
</div>
</div>
</div>
<div class="col-lg-4">
<ul class="rettList">
<li><a href="javascript:void(0)">Рейтинг: <span> 1245</span></a></li>
<li><a href="javascript:void(0)">Безопасные сделки: <span> 5</span></a></li>
<li>
<a href="javascript:void(0)">
Отзывы:
<span> + 385</span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
<div class="sroUser">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
</div>
</div>
<div class="col-lg-9">
<div class="profileTabs2">
<ul class="nav nav-tabs nav-justified">
<li role="presentation" class="active">
<a href="#tab11" data-toggle="tab">Портфолио</a>
</li>
<li role="presentation">
<a href="#tab12" data-toggle="tab">Готовые проекты</a>
</li>
<li role="presentation">
<a href="#tab13" data-toggle="tab">Резюме / Квалификация</a>
</li>
<li role="presentation">
<a href="#tab14" data-toggle="tab">Отзывы</a>
</li>
</ul>
</div>
</div>
<div class="tab-content">
<div id="tab11" class="tab-pane fade in active">
<div class="col-lg-9">
<p class="addWork">
<a href="#">Добавить работу</a>
</p>
</div>
<div class="galleryWork2 disTab">
{% for p in user.portfolio.all %}
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ p.name }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="col-lg-9 col-lg-offset-3">
<div class="linkElse">
<a href="javascript:void(0)" class="showElse">показать еще</a>
</div>
</div>
</div>
<div id="tab12" class="tab-pane fade">
<div class="col-lg-9">
<p class="addWork">
<a href="#">Добавить проект</a>
</p>
</div>
<div class="galleryWork2 disTab">
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
35 000 <i class="fa fa-rub"></i>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Визуализация
загородного
дома 1500m2
</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
35 000 <i class="fa fa-rub"></i>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Визуализация
загородного
дома 1500m2
</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
35 000 <i class="fa fa-rub"></i>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Визуализация
загородного
дома 1500m2
</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-9 col-lg-offset-3">
<div class="linkElse">
<a href="javascript:void(0)" class="showElse">показать еще</a>
</div>
</div>
</div>
<div id="tab13" class="tab-pane fade">
<div class="col-lg-9 resume">
<div class="upload2 up-l1">
<input type="file" name="upload">
<p>Загрузить резюме</p>
</div>
<div class="upload2 up-l2">
<input type="file" name="upload">
<p>Загрузить файл</p>
</div>
</div>
<div class="col-lg-9 resume-block">
<div class="block-is box-sizing">
<div class="block-i">
<img src="img/profile.jpg" alt="profile-image">
</div>
</div>
<div class="col-lg-9">
<div class="top-summary">
<p class="name-summ">Иванов Петр Сергеевич</p>
<a href="javascript:void(0)" class="download-summ">скачать резюме</a>
<p class="who-summ">
Мужчина, 24 года, 14 февраля 1991
</p>
<div class="list-summ-block">
<div class="col-lg-4">
<ul class="list-summ">
<li>brilliantov.me</li>
<li>alex@brilliantov.me</li>
<li>+7 968 009 19 99</li>
<li>Россия, Москва</li>
</ul>
</div>
<div class="col-lg-6 col-lg-offset-2">
<div class="dashedCol4">
<p class="specUser">
Специализации:
</p>
<div class="insetSpec">
<span>Интерьеры</span>
<span>2-й</span>
</div>
<div class="insetSpec">
<span>Визуализация/3D</span>
<span>45-й</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12 wr-inset-pluss">
<div class="pluss-block">
<div class="pluss">
<p>Что я умею?</p>
<span>
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!
</span>
</div>
<div class="pluss">
<p>Что я умею?</p>
<span>
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!
</span>
</div>
<div class="pluss">
<p>Что я умею?</p>
<span>
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!
</span>
</div>
</div>
<div class="gal-pluss">
<div class="inset-gp">
<p class="title-gp">Дипломы / Сертификаты</p>
<div class="upload2 up-l3">
<input type="file" name="upload">
<p>Загрузить файл</p>
</div>
<div class="galleryWork2 gal-iss disTab">
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="inset-gp">
<p class="title-gp">Допуск СРО</p>
<div class="upload2 up-l3">
<input type="file" name="upload">
<p>Загрузить файл</p>
</div>
<div class="galleryWork2 gal-iss disTab">
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="tab14" class="tab-pane fade">
<div class="new-comm-44">
<div class="col-lg-12">
<p class="nameComm">
<a href="#">Иванов Петр Иванович</a>
</p>
<span class="dateComm44">
Безопасная сделка
</span>
<div class="stars box-sizing">
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<a href="#">положительный отзыв</a>
</div>
<p class="textComm44">
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.
</p>
</div>
</div>
</div>
</div>
<div>
</div>
</div>
{% endblock %}

@ -0,0 +1,4 @@
{% extends 'base.html' %}
{% block content %}
<h1>Заказчик</h1>
{% endblock %}

@ -1,12 +1,13 @@
from django.conf import urls from django.conf import urls
from django.contrib.auth.views import login, logout from django.contrib.auth.views import login, logout
from .views import UserListView, UserDetailView, UserInfoListView from .views import UserListView, UserDetailView, UserInfoListView, UserView
urlpatterns = [ urlpatterns = [
urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'), urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'),
# urls.url(r'^login/?$', login, {'template_name': 'users/login.html'}), # urls.url(r'^login/?$', login, {'template_name': 'users/login.html'}),
# urls.url(r'^logout/?$', logout), # urls.url(r'^logout/?$', logout),
urls.url(r'^$', UserListView.as_view(), name='users_list'), urls.url(r'^$', UserListView.as_view(), name='users_list'),
urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'), urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'),
urls.url(r'^contractor/(?P<pk>\d+)$$', UserView.as_view(), name='user_view'),
urls.url(r'^(?P<pk>\d+)$', UserView.as_view(), name='user_view'),
] ]

@ -1,6 +1,6 @@
from django.shortcuts import render from django.shortcuts import render
from django.contrib.auth.models import Group 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 from .models import User
@ -23,3 +23,33 @@ class UserInfoListView(ListView):
class UserDetailView(DetailView): class UserDetailView(DetailView):
model = User 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

Loading…
Cancel
Save