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. 32
      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. 250
      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('---------------------------------------')
# ('portfolios', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('owner', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'),
# ('users', 'Relation? True', 'Null? False', '(relation)', 'Hidden? False'),
#
# ('name', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'),
# ('specializations', 'Relation? True', 'Null? False', '(relation)', '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:
team = Team.objects.create(name="%s's team" % contr.username, owner=contr)
team.users = User.contractor_objects.filter(team=None)[:_.random(1, 4)]
pass

@ -95,7 +95,7 @@ class Command(BaseCommand):
for user in users:
user.set_password('123')
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.save()

@ -8,13 +8,21 @@ import random
from archilance import util
from common.models import Location
from projects.models import Project, Order, CURRENCIES, TERMS, Specialization, Realty
from users.models import User
from users.models import User, Team
class Command(BaseCommand):
def handle(self, *args, **options):
for user in User.objects.all():
user.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first()
user.cro = _.sample((True, False))
# for user in User.objects.all():
# user.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first()
# user.cro = _.sample((True, False))
#
# 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()
user.save()
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.utils import timezone
from users.models import User
from users.models import User, Team
from specializations.models import Specialization
@ -181,16 +181,17 @@ class Candidate(models.Model):
class Portfolio(models.Model):
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)
construction_type = models.ForeignKey(ConstructionType, 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)
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
description = models.TextField()
location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True)
name = models.CharField(max_length=255)
specialization = TreeForeignKey(Specialization, related_name='portfolios',null=True, blank=True)
term = models.IntegerField(default=0,null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour',null=True, blank=True)
user = models.ForeignKey(User, related_name='portfolios')
specialization = TreeForeignKey(Specialization, related_name='portfolios', null=True, blank=True)
team = models.ForeignKey(Team, related_name='portfolios', null=True, blank=True)
term = models.IntegerField(default=0, null=True, blank=True)
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)
def __str__(self):
@ -201,20 +202,17 @@ class Portfolio(models.Model):
verbose_name_plural = 'Портфолио'
def get_cover(self):
cover = None
all_photos = self.portfoliophoto_set.all()
if all_photos:
cover = all_photos[0].img
return cover
photo = self.photos.first()
return photo and photo.img.url
class PortfolioPhoto(models.Model):
img = models.ImageField(upload_to='projects/portfolio')
portfolio = models.ForeignKey(Portfolio)
portfolio = models.ForeignKey(Portfolio, related_name='photos')
class Meta:
verbose_name = 'Фото портфолио'
verbose_name_plural = 'Фото портфолио'
# def __str__(self):
# return self.img
def __str__(self):
return self.img and self.img.url or str(self.img)

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

@ -41,11 +41,14 @@ class UserEditForm(ModelForm):
class ContractorFilterForm(forms.Form):
CONTRACTOR_ORDER_CHOICES = ( # "Упорядочить по"...
('name', 'названию'),
('budget', 'цене'),
('created', 'дате размещения'),
('views', 'просмотрам'),
CONTRACTOR_ORDER_CHOICES = (
('', 'Сортировать по...'),
('name', 'Названию'),
('created', 'Дате размещения'),
('views', 'Просмотрам'),
('reviews', 'Отзывам'),
('rating', 'Рейтингу'),
# ('project_number', 'Кол-ву выполн. проектов'),
)
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):
created = models.DateTimeField(default=timezone.now)
name = models.CharField(max_length=255)
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)
# groups = models.ManyToManyField(Group, related_name='teams', blank=True)
def __str__(self):
return self.name

@ -152,12 +152,15 @@
<div class="polsF1 disTab polsSearch">
<div class="col-lg-3">
<select class="selectpicker">
<option>Сортировать по рейтингу</option>
<option>Ketchup</option>
<option>Relish</option>
<select name="{{ form.order_by.html_name }}" onchange="$(this).closest('form').submit()" class="selectpicker">
{% for val, text in form.order_by.field.choices %}
<option value="{{ val }}">{{ text }}</option>
{% endfor %}
</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>
@ -174,47 +177,134 @@
<p class="nameExecutor">
<a href="#">{{ team.name }}</a>
</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 class="col-lg-3">
<div class="dashedCol4 dashedCol44">
<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="showSpec">
<div class="insetSpec">
<span>Архитектура</span>
<span>3-й</span>
</div>
<div class="insetSpec">
<span>3D Моделирование</span>
<span>100-й</span>
</div>
</div>
<button class="showPress">
</button>
</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 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>
{% endif %}
</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">
{% 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>
{% endwith %}
@ -236,7 +326,7 @@
<div class="col-lg-2">
<ul class="listExecutor">
<li>
<a href="javascript:void(0)">
<a href="{% url 'users:contractor-profile' pk=obj.pk %}">
смотреть профиль
</a>
</li>
@ -307,62 +397,36 @@
</div>
{% if TEMPLATE_DEBUG %}
<div class="col-lg-12">
<pre><!--
--><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--
--><br><!--
--><b>Location:</b> {{ contractor.location }}<br><!--
--><br><!--
--><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--
--><br><!--
--><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--
--><br><!--
--><b>CRO:</b> {{ contractor.cro }}<br><!--
--><br><!--
--><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--
--></pre>
</div>
{% endif %}
{# {% if TEMPLATE_DEBUG %}#}
{# <div class="col-lg-12">#}
{# <pre><!--#}
{# --><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--#}
{# --><br><!--#}
{# --><b>Location:</b> {{ contractor.location }}<br><!--#}
{# --><br><!--#}
{# --><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--#}
{# --><br><!--#}
{# --><b>CRO:</b> {{ contractor.cro }}<br><!--#}
{# --><br><!--#}
{# --><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--#}
{# --></pre>#}
{# </div>#}
{# {% endif %}#}
<div class="gallMini disTab">
<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 class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
{% for portf in contractor.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>
</div>
</a>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
{% endwith %}

@ -141,7 +141,7 @@
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<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>
</div>

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

Loading…
Cancel
Save