remotes/origin/setup
ArturBaybulatov 10 years ago
parent 6f7f8e44aa
commit 70d82b60cc
  1. 71
      archilance/management/commands/generate_portfolios.py
  2. 11
      archilance/management/commands/generate_teams.py
  3. 2
      archilance/management/commands/generate_users.py
  4. 18
      archilance/management/commands/tmp.py
  5. 19
      common/migrations/0005_auto_20160720_1327.py
  6. 23
      projects/migrations/0040_portfolio_team.py
  7. 27
      projects/migrations/0041_auto_20160720_1531.py
  8. 21
      projects/migrations/0042_auto_20160720_1641.py
  9. 28
      projects/models.py
  10. 2
      projects/templates/project_filter.html
  11. 13
      users/forms.py
  12. 22
      users/migrations/0022_team_specializations.py
  13. 21
      users/migrations/0023_team_created.py
  14. 3
      users/models.py
  15. 248
      users/templates/contractor_filter.html
  16. 2
      users/templates/contractor_profile.html
  17. 4
      users/views.py

@ -0,0 +1,71 @@
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from django.core.management import BaseCommand
from django.utils import timezone
import pydash as _; _.map = _.map_; _.filter = _.filter_
import random
from archilance import util
from common.models import Location
from projects.models import Portfolio, PortfolioPhoto, CURRENCIES, TERMS, BuildingClassfication , ConstructionType
from specializations.models import Specialization
from users.models import User, Team, GENDERS
class Command(BaseCommand):
def handle(self, *args, **options):
print('---------------------------------------')
print('Generating portfolios...')
print('---------------------------------------')
# ('photos', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('budget', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'),
# ('building_classification', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('construction_type', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('currency', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'),
# ('description', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'),
# ('location', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('name', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'),
# ('specialization', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('team', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('term', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'),
# ('term_type', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'),
# ('user', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('worksell', 'Relation? False', 'Null? False', 'Blank? True', 'Hidden? False'),
def create_portfolio(i):
portf = Portfolio(
name='Portforlio %s' % i,
description="Portforlio %s's description" % i,
budget=util.random_amount(),
currency=_.sample(CURRENCIES)[0],
term=_.random(0, 20),
term_type=_.sample(TERMS)[0],
worksell=_.sample((True, False)),
)
portf.save()
if _.sample((True, False)):
portf.user = User.contractor_objects.order_by('?').first()
else:
portf.team = Team.objects.order_by('?').first()
portf.building_classification = BuildingClassfication.objects.order_by('?').first()
portf.construction_type = ConstructionType.objects.order_by('?').first()
portf.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first()
portf.specialization = Specialization.objects.root_nodes()[0].get_descendants().order_by('?').first()
pic_names = _.split('a.png b.png c.jpg d.png e.jpg f.png g.png h.jpg i.png j.png k.jpg l.png m.png n.png o.png p.png q.jpg', ' ')
_.times(
lambda i_: portf.photos.create(img='_sample_files/%s' % util.take_one_random(pic_names)),
_.random(1, 15),
)
portf.save()
return portf
_.times(create_portfolio, 1000)

@ -18,15 +18,12 @@ class Command(BaseCommand):
print('---------------------------------------') print('---------------------------------------')
# ('portfolios', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('owner', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), # ('owner', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('users', 'Relation? True', 'Null? False', '(relation)', 'Hidden? False'), # ('users', 'Relation? True', 'Null? False', '(relation)', 'Hidden? False'),
# # ('specializations', 'Relation? True', 'Null? False', '(relation)', 'Hidden? False'),
# ('name', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'),
# ('name', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'),
contractors = User.contractor_objects.order_by('?')
contractors = contractors[:contractors.count() // 2]
for contr in contractors: pass
team = Team.objects.create(name="%s's team" % contr.username, owner=contr)
team.users = User.contractor_objects.filter(team=None)[:_.random(1, 4)]

@ -95,7 +95,7 @@ class Command(BaseCommand):
for user in users: for user in users:
user.set_password('123') user.set_password('123')
user.groups.add(customer_group if user.pk % 2 == 0 else contractor_group) user.groups.add(customer_group if user.pk % 2 == 0 else contractor_group)
user.contractor_specializations = Specialization.objects.order_by('?')[:_.random(1, 5)] user.contractor_specializations = Specialization.objects.root_nodes()[0].get_descendants().order_by('?')[:_.random(1, 5)]
user.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first() user.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first()
user.save() user.save()

@ -8,13 +8,21 @@ import random
from archilance import util from archilance import util
from common.models import Location from common.models import Location
from projects.models import Project, Order, CURRENCIES, TERMS, Specialization, Realty from projects.models import Project, Order, CURRENCIES, TERMS, Specialization, Realty
from users.models import User from users.models import User, Team
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
for user in User.objects.all(): # for user in User.objects.all():
user.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first() # user.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first()
user.cro = _.sample((True, False)) # user.cro = _.sample((True, False))
#
# user.save()
user.save() #------------------------------------------
for team in Team.objects.all():
# team.specializations = Specialization.objects.root_nodes()[0].get_descendants().order_by('?')[:_.random(1, 5)]
team.created = util.random_date()
team.save()

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-20 10:27
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('common', '0004_settings'),
]
operations = [
migrations.AlterModelOptions(
name='settings',
options={'verbose_name': 'Настройки сайта', 'verbose_name_plural': 'Настройки сайта'},
),
]

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-20 10:27
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('users', '0021_contractorresumefiles_resume'),
('projects', '0039_auto_20160707_1724'),
]
operations = [
migrations.AddField(
model_name='portfolio',
name='team',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='users.Team'),
preserve_default=False,
),
]

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-20 12:31
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('projects', '0040_portfolio_team'),
]
operations = [
migrations.AlterField(
model_name='portfolio',
name='team',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='users.Team'),
),
migrations.AlterField(
model_name='portfolio',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to=settings.AUTH_USER_MODEL),
),
]

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-20 13:41
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('projects', '0041_auto_20160720_1531'),
]
operations = [
migrations.AlterField(
model_name='portfoliophoto',
name='portfolio',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='photos', to='projects.Portfolio'),
),
]

@ -3,7 +3,7 @@ from datetime import datetime
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from users.models import User from users.models import User, Team
from specializations.models import Specialization from specializations.models import Specialization
@ -181,16 +181,17 @@ class Candidate(models.Model):
class Portfolio(models.Model): class Portfolio(models.Model):
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True) budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios',null=True, blank=True) building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='portfolios',null=True, blank=True) construction_type = models.ForeignKey(ConstructionType, related_name='portfolios', null=True, blank=True)
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
description = models.TextField() description = models.TextField()
location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True) location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
specialization = TreeForeignKey(Specialization, related_name='portfolios',null=True, blank=True) specialization = TreeForeignKey(Specialization, related_name='portfolios', null=True, blank=True)
term = models.IntegerField(default=0,null=True, blank=True) team = models.ForeignKey(Team, related_name='portfolios', null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour',null=True, blank=True) term = models.IntegerField(default=0, null=True, blank=True)
user = models.ForeignKey(User, related_name='portfolios') term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True)
user = models.ForeignKey(User, related_name='portfolios', null=True, blank=True)
worksell = models.BooleanField(default=False) worksell = models.BooleanField(default=False)
def __str__(self): def __str__(self):
@ -201,20 +202,17 @@ class Portfolio(models.Model):
verbose_name_plural = 'Портфолио' verbose_name_plural = 'Портфолио'
def get_cover(self): def get_cover(self):
cover = None photo = self.photos.first()
all_photos = self.portfoliophoto_set.all() return photo and photo.img.url
if all_photos:
cover = all_photos[0].img
return cover
class PortfolioPhoto(models.Model): class PortfolioPhoto(models.Model):
img = models.ImageField(upload_to='projects/portfolio') img = models.ImageField(upload_to='projects/portfolio')
portfolio = models.ForeignKey(Portfolio) portfolio = models.ForeignKey(Portfolio, related_name='photos')
class Meta: class Meta:
verbose_name = 'Фото портфолио' verbose_name = 'Фото портфолио'
verbose_name_plural = 'Фото портфолио' verbose_name_plural = 'Фото портфолио'
# def __str__(self): def __str__(self):
# return self.img return self.img and self.img.url or str(self.img)

@ -13,7 +13,7 @@
<form action="{% url 'projects:project-filter' %}" method="GET" novalidate> <form action="{% url 'projects:project-filter' %}" method="GET" novalidate>
<div class="col-lg-12"> <div class="col-lg-12">
<div class="filter clearfix"> --<div class="filter clearfix">
<div class="triangle1"></div> <div class="triangle1"></div>

@ -41,11 +41,14 @@ class UserEditForm(ModelForm):
class ContractorFilterForm(forms.Form): class ContractorFilterForm(forms.Form):
CONTRACTOR_ORDER_CHOICES = ( # "Упорядочить по"... CONTRACTOR_ORDER_CHOICES = (
('name', 'названию'), ('', 'Сортировать по...'),
('budget', 'цене'), ('name', 'Названию'),
('created', 'дате размещения'), ('created', 'Дате размещения'),
('views', 'просмотрам'), ('views', 'Просмотрам'),
('reviews', 'Отзывам'),
('rating', 'Рейтингу'),
# ('project_number', 'Кол-ву выполн. проектов'),
) )
PARTY_TYPES = ( PARTY_TYPES = (

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-20 10:27
from __future__ import unicode_literals
from django.db import migrations
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('specializations', '0002_auto_20160602_1203'),
('users', '0021_contractorresumefiles_resume'),
]
operations = [
migrations.AddField(
model_name='team',
name='specializations',
field=mptt.fields.TreeManyToManyField(blank=True, related_name='teams', to='specializations.Specialization'),
),
]

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-20 16:30
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('users', '0022_team_specializations'),
]
operations = [
migrations.AddField(
model_name='team',
name='created',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

@ -179,10 +179,11 @@ class User(AbstractBaseUser, PermissionsMixin):
class Team(models.Model): class Team(models.Model):
created = models.DateTimeField(default=timezone.now)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
owner = models.OneToOneField(User, related_name='team', blank=True, null=True) owner = models.OneToOneField(User, related_name='team', blank=True, null=True)
specializations = TreeManyToManyField(Specialization, related_name='teams', blank=True)
users = models.ManyToManyField(User, related_name ='teams', blank=True) users = models.ManyToManyField(User, related_name ='teams', blank=True)
# groups = models.ManyToManyField(Group, related_name='teams', blank=True)
def __str__(self): def __str__(self):
return self.name return self.name

@ -152,12 +152,15 @@
<div class="polsF1 disTab polsSearch"> <div class="polsF1 disTab polsSearch">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select name="{{ form.order_by.html_name }}" onchange="$(this).closest('form').submit()" class="selectpicker">
<option>Сортировать по рейтингу</option> {% for val, text in form.order_by.field.choices %}
<option>Ketchup</option> <option value="{{ val }}">{{ text }}</option>
<option>Relish</option> {% endfor %}
</select> </select>
</div> </div>
<input type="hidden" name="{{ form.last_order_by.html_name }}" value="{{ last_order_by }}">
<input type="checkbox" name="{{ form.reverse_order.html_name }}" {% if reverse_order %}checked{% endif %} style="display: none">
</div> </div>
</div> </div>
@ -174,47 +177,134 @@
<p class="nameExecutor"> <p class="nameExecutor">
<a href="#">{{ team.name }}</a> <a href="#">{{ team.name }}</a>
</p> </p>
<p class="navv2">На сайте 8 лет и 3 месяца</p>
<div class="statusUser">Свободен</div>
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="javascript:void(0)">
смотреть профиль
</a>
</li>
<li>
<a href="javascript:void(0)">
предложить проект
</a>
</li>
<li>
<a href="javascript:void(0)">
написать сообщение
</a>
</li>
</ul>
</div> </div>
{% if TEMPLATE_DEBUG %} <div class="col-lg-3">
<div class="col-lg-12" style="margin-bottom: 20px"> <div class="dashedCol4 dashedCol44">
<pre><!-- <p class="specUser">
--><b>######## Team owner #########</b><br><!-- Специализации:
--><br><!-- </p>
--><b>Specializations:</b> {{ team.owner.contractor_specializations.all }}<br><!-- <div class="insetSpec">
--><br><!-- <span>Интерьеры</span>
--><b>Location:</b> {{ team.owner.location }}<br><!-- <span>2-й</span>
--><br><!-- </div>
--><b>Build. classif-s:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!-- <div class="insetSpec">
--><br><!-- <span>Визуализация/3D</span>
--><b>Constr. types:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!-- <span>45-й</span>
--><br><!-- </div>
--><b>CRO:</b> {{ team.owner.cro }}<br><!-- <div class="insetSpec">
--><br><!-- <span>Экстерьеры</span>
--><b>Work types:</b> {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!-- <span>10-й</span>
--><br><!-- </div>
--><br><!-- <div class="showSpec">
--><br><!-- <div class="insetSpec">
--><b>######## Team users #########</b><br><!-- <span>Архитектура</span>
--><br><!-- <span>3-й</span>
--><b>Specializations:</b> {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}<br><!-- </div>
--><br><!-- <div class="insetSpec">
--><b>Location:</b> {% for u in team.users.all %}{{ u.location }}, {% endfor %}<br><!-- <span>3D Моделирование</span>
--><br><!-- <span>100-й</span>
--><b>Build. classif-s:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}<br><!-- </div>
--><br><!-- </div>
--><b>Constr. types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}<br><!-- <button class="showPress">
--><br><!--
--><b>CRO:</b> {% for u in team.users.all %}{{ u.cro }}, {% endfor %}<br><!-- </button>
--><br><!--
--><b>Work types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}<br><!--
--></pre>
</div> </div>
{% endif %} </div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span> 1245</span></li>
<li>Безопасные сделки: <span> 5</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 385</span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
</div>
{# {% if TEMPLATE_DEBUG %}#}
{# <div class="col-lg-12" style="margin-bottom: 20px">#}
{# <pre><!--#}
{# --><b>######## Team owner #########</b><br><!--#}
{# --><br><!--#}
{# --><b>Specializations:</b> {{ team.owner.contractor_specializations.all }}<br><!--#}
{# --><br><!--#}
{# --><b>Location:</b> {{ team.owner.location }}<br><!--#}
{# --><br><!--#}
{# --><b>Build. classif-s:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Constr. types:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>CRO:</b> {{ team.owner.cro }}<br><!--#}
{# --><br><!--#}
{# --><b>Work types:</b> {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><br><!--#}
{# --><br><!--#}
{# --><b>######## Team users #########</b><br><!--#}
{# --><br><!--#}
{# --><b>Specializations:</b> {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Location:</b> {% for u in team.users.all %}{{ u.location }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Build. classif-s:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Constr. types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>CRO:</b> {% for u in team.users.all %}{{ u.cro }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Work types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}<br><!--#}
{# --></pre>#}
{# </div>#}
{# {% endif %}#}
<div class="gallMini disTab"> <div class="gallMini disTab">
{% for portf in team.portfolios.all|slice:':4' %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
{% endfor %}
</div> </div>
</div> </div>
{% endwith %} {% endwith %}
@ -236,7 +326,7 @@
<div class="col-lg-2"> <div class="col-lg-2">
<ul class="listExecutor"> <ul class="listExecutor">
<li> <li>
<a href="javascript:void(0)"> <a href="{% url 'users:contractor-profile' pk=obj.pk %}">
смотреть профиль смотреть профиль
</a> </a>
</li> </li>
@ -307,62 +397,36 @@
</div> </div>
{% if TEMPLATE_DEBUG %} {# {% if TEMPLATE_DEBUG %}#}
<div class="col-lg-12"> {# <div class="col-lg-12">#}
<pre><!-- {# <pre><!--#}
--><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!-- {# --><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--#}
--><br><!-- {# --><br><!--#}
--><b>Location:</b> {{ contractor.location }}<br><!-- {# --><b>Location:</b> {{ contractor.location }}<br><!--#}
--><br><!-- {# --><br><!--#}
--><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!-- {# --><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--#}
--><br><!-- {# --><br><!--#}
--><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!-- {# --><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--#}
--><br><!-- {# --><br><!--#}
--><b>CRO:</b> {{ contractor.cro }}<br><!-- {# --><b>CRO:</b> {{ contractor.cro }}<br><!--#}
--><br><!-- {# --><br><!--#}
--><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!-- {# --><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--#}
--></pre> {# --></pre>#}
</div> {# </div>#}
{% endif %} {# {% endif %}#}
<div class="gallMini disTab"> <div class="gallMini disTab">
<div class="col-lg-3"> {% for portf in contractor.portfolios.all|slice:':4' %}
<a href="#" class="linkInsetCol"> <div class="col-lg-3">
<div class="insetCol box-sizing disTab"> <a href="#" class="linkInsetCol">
<div class="imgGal"> <div class="insetCol box-sizing disTab">
<div class="imgFigure"></div> <div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')">
<div class="imgFigure"></div>
</div>
</div> </div>
</div> </a>
</a> </div>
</div> {% endfor %}
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
</div> </div>
</div> </div>
{% endwith %} {% endwith %}

@ -141,7 +141,7 @@
<div class="col-lg-4"> <div class="col-lg-4">
<div class="insetCol box-sizing disTab"> <div class="insetCol box-sizing disTab">
<div class="imgGal" <div class="imgGal"
style="background:rgba(0, 0, 0, 0) url('/media/{{ p.get_cover }}') no-repeat scroll center center / cover ;"> style="background:rgba(0, 0, 0, 0) url('{{ p.get_cover }}') no-repeat scroll center center / cover ;">
<div class="imgFigure"></div> <div class="imgFigure"></div>
</div> </div>
</div> </div>

@ -178,8 +178,8 @@ class ContractorFilterView(BaseMixin, View):
if ord: if ord:
if ord == 'name': if ord == 'name':
coll = natsort.natsorted(coll, key=lambda obj: getattr(obj, 'username', None) or obj.name, reverse=reverse_order) coll = natsort.natsorted(coll, key=lambda obj: getattr(obj, 'username', None) or obj.name, reverse=reverse_order)
else: elif ord =='created':
coll = natsort.natsorted(coll, key=lambda obj: getattr(obj, ord), reverse=reverse_order) coll = natsort.natsorted(coll, key=lambda obj: obj.created, reverse=reverse_order)
context.update({ context.update({
'last_order_by': last_order_by, 'last_order_by': last_order_by,

Loading…
Cancel
Save