diff --git a/archilance/settings/base.py b/archilance/settings/base.py
index 1db8c06..a7aeed5 100644
--- a/archilance/settings/base.py
+++ b/archilance/settings/base.py
@@ -30,23 +30,26 @@ ALLOWED_HOSTS = []
# Application definition
-DJANGO_APPS = (
+DJANGO_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
-)
+]
-THIRD_PARTY_APPS = (
+THIRD_PARTY_APPS = [
'registration',
-)
+ 'mptt',
+ 'guardian',
+]
-LOCAL_APPS = (
+LOCAL_APPS = [
'projects',
'users',
-)
+ 'specialization',
+]
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS
@@ -86,10 +89,21 @@ WSGI_APPLICATION = 'archilance.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+# DATABASES = {
+# 'default': {
+# 'ENGINE': 'django.db.backends.sqlite3',
+# 'NAME': os.path.join(ROOT_DIR, 'db.sqlite3'),
+# }
+# }
+
DATABASES = {
'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': os.path.join(ROOT_DIR, 'db.sqlite3'),
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
+ 'NAME': 'archilance',
+ 'USER': 'postgres',
+ 'PASSWORD': 'postgres',
+ 'HOST': 'localhost',
+ 'PORT': '',
}
}
@@ -114,6 +128,7 @@ AUTH_PASSWORD_VALIDATORS = [
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
+ 'guardian.backends.ObjectPermissionBackend',
)
@@ -147,6 +162,7 @@ STATICFILES_DIRS = (
AUTH_USER_MODEL = 'users.CustomUser'
ACCOUNT_ACTIVATION_DAYS = 7
REGISTRATION_AUTO_LOGIN = True
+LOGIN_REDIRECT_URL = '/projects/'
if DEBUG:
EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
\ No newline at end of file
diff --git a/archilance/settings/dev.py b/archilance/settings/dev.py
index 9b5ed21..c35cdf9 100644
--- a/archilance/settings/dev.py
+++ b/archilance/settings/dev.py
@@ -1 +1,3 @@
from .base import *
+
+INSTALLED_APPS += ['debug_toolbar',]
diff --git a/archilance/urls.py b/archilance/urls.py
index 9070f45..c8974bd 100644
--- a/archilance/urls.py
+++ b/archilance/urls.py
@@ -24,6 +24,7 @@ from .views import HomeTemplateView
urlpatterns = [
url(r'^$', HomeTemplateView.as_view()),
url(r'^projects/', include('projects.urls')),
+ url(r'^specialization/', include('specialization.urls')),
url(r'^users/', include('registration.backends.default.urls')),
url(r'^users/', include('users.urls')),
url(r'^admin/', admin.site.urls),
diff --git a/db.sqlite3 b/db.sqlite3
index 5d17e99..01b8e22 100644
Binary files a/db.sqlite3 and b/db.sqlite3 differ
diff --git a/media/projects/portfolio/slide-01.jpg b/media/projects/portfolio/slide-01.jpg
new file mode 100644
index 0000000..68a874b
Binary files /dev/null and b/media/projects/portfolio/slide-01.jpg differ
diff --git a/media/projects/portfolio/slide-02.jpg b/media/projects/portfolio/slide-02.jpg
new file mode 100644
index 0000000..b025985
Binary files /dev/null and b/media/projects/portfolio/slide-02.jpg differ
diff --git a/media/projects/portfolio/slide-02_duVsn8v.jpg b/media/projects/portfolio/slide-02_duVsn8v.jpg
new file mode 100644
index 0000000..b025985
Binary files /dev/null and b/media/projects/portfolio/slide-02_duVsn8v.jpg differ
diff --git a/projects/admin.py b/projects/admin.py
index 6990374..2e9c486 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -1,4 +1,7 @@
from django.contrib import admin
-from .models import Project
+
+from .models import Project, Portfolio, PortfolioPhoto
admin.site.register(Project)
+admin.site.register(Portfolio)
+admin.site.register(PortfolioPhoto)
diff --git a/projects/forms.py b/projects/forms.py
index 5c85e4e..212da06 100644
--- a/projects/forms.py
+++ b/projects/forms.py
@@ -5,4 +5,4 @@ class ProjectForm(ModelForm):
class Meta:
model = Project
- fields = ['name', 'text']
\ No newline at end of file
+ fields = ['name', 'text', 'price', 'user','specialization']
\ No newline at end of file
diff --git a/projects/migrations/0001_initial.py b/projects/migrations/0001_initial.py
index da76ff8..ebcd54c 100644
--- a/projects/migrations/0001_initial.py
+++ b/projects/migrations/0001_initial.py
@@ -1,8 +1,10 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.9.6 on 2016-05-05 10:12
+# Generated by Django 1.9.6 on 2016-05-12 10:37
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):
@@ -10,9 +12,28 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
+ ('specialization', '0002_auto_20160512_1013'),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
+ migrations.CreateModel(
+ name='Portfolio',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=255)),
+ ('description', models.TextField()),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ migrations.CreateModel(
+ name='PortfolioPhoto',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('img', models.ImageField(upload_to='projects/portfolio')),
+ ('portfolio', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Portfolio')),
+ ],
+ ),
migrations.CreateModel(
name='Project',
fields=[
@@ -20,6 +41,12 @@ class Migration(migrations.Migration):
('name', models.CharField(max_length=255)),
('price', models.DecimalField(decimal_places=2, max_digits=10)),
('text', models.TextField(blank=True)),
+ ('specialization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='spec', to='specialization.Specialization')),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='customers', to=settings.AUTH_USER_MODEL)),
],
+ options={
+ 'verbose_name_plural': 'Проекты',
+ 'verbose_name': 'Проект',
+ },
),
]
diff --git a/projects/migrations/0002_project_user.py b/projects/migrations/0002_project_user.py
deleted file mode 100644
index d7f4fad..0000000
--- a/projects/migrations/0002_project_user.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.6 on 2016-05-06 09:36
-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 = [
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ('projects', '0001_initial'),
- ]
-
- operations = [
- migrations.AddField(
- model_name='project',
- name='user',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='customers', to=settings.AUTH_USER_MODEL),
- ),
- ]
diff --git a/projects/models.py b/projects/models.py
index 5457991..2c99bbc 100644
--- a/projects/models.py
+++ b/projects/models.py
@@ -1,13 +1,17 @@
# coding: utf-8
from django.db import models
from users.models import CustomUser
-
+from specialization.models import Specialization
class Project(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=10, decimal_places=2)
text = models.TextField(blank=True)
+ # type_work = models.CharField()
+ # budget = models.CharField()
+ # cro = models.BooleanField(default=False)
user = models.ForeignKey(CustomUser, related_name='customers')
+ specialization = models.ForeignKey(Specialization, related_name='spec', null=True)
def __str__(self):
return self.name
@@ -15,3 +19,18 @@ class Project(models.Model):
class Meta:
verbose_name = 'Проект'
verbose_name_plural = 'Проекты'
+
+class Portfolio(models.Model):
+ name = models.CharField(max_length=255)
+ description = models.TextField()
+ user = models.ForeignKey(CustomUser)
+
+ def __str__(self):
+ return self.name
+
+class PortfolioPhoto(models.Model):
+ img = models.ImageField(upload_to='projects/portfolio')
+ portfolio = models.ForeignKey(Portfolio)
+
+ # def __str__(self):
+ # return self.img
\ No newline at end of file
diff --git a/projects/signals.py b/projects/signals.py
new file mode 100644
index 0000000..b056dda
--- /dev/null
+++ b/projects/signals.py
@@ -0,0 +1,8 @@
+from django.core.signals import request_finished
+from django.dispatch import receiver
+from .models import Project
+
+@receiver(request_finished)
+def add_project_test(sender, **kwargs):
+ pr = Project.objects.create(name='Test', price=100, user=2, spec=2)
+ pr.save()
\ No newline at end of file
diff --git a/projects/templates/projects/project_detail.html b/projects/templates/projects/project_detail.html
index a3722fc..bb1d4d8 100644
--- a/projects/templates/projects/project_detail.html
+++ b/projects/templates/projects/project_detail.html
@@ -1,4 +1,5 @@
{% extends "base.html" %}
{% block content %}
{{ object }}
+ {{ object.user }}
{% endblock %}s
\ No newline at end of file
diff --git a/projects/templates/projects/project_form.html b/projects/templates/projects/project_form.html
index f8d5da3..9e90c68 100644
--- a/projects/templates/projects/project_form.html
+++ b/projects/templates/projects/project_form.html
@@ -2,14 +2,30 @@
{% block content %}
Добавление
{% endblock %}s
\ No newline at end of file
diff --git a/projects/templates/projects/project_list.html b/projects/templates/projects/project_list.html
index f002829..f9b7951 100644
--- a/projects/templates/projects/project_list.html
+++ b/projects/templates/projects/project_list.html
@@ -197,12 +197,6 @@
{% endfor %}
- {{ user_id }}
-{{ user }}
- {% for perm in permissions %}
- {{ perm }}
- {{ perm.codename }}
- {% endfor %}
diff --git a/projects/urls.py b/projects/urls.py
index c656547..2b24299 100644
--- a/projects/urls.py
+++ b/projects/urls.py
@@ -3,6 +3,7 @@ from django.conf import urls
from .views import ProjectListView, ProjectDetailView, ProjectCreateView
+
urlpatterns = [
urls.url(r'^$', ProjectListView.as_view(), name='projects-list'),
urls.url(r'^create/$', ProjectCreateView.as_view(), name='project-create'),
diff --git a/projects/views.py b/projects/views.py
index 7bee5bc..c83bc6d 100644
--- a/projects/views.py
+++ b/projects/views.py
@@ -14,17 +14,13 @@ class ProjectListView(ListView):
def get_context_data(self, **kwargs):
context = super(ProjectListView, self).get_context_data(**kwargs)
- # context['permissions'] = Permission.objects.filter(group__user=self.request.user.id)
- user = CustomUser.objects.get(id=self.request.user.id)
- # context['permissions'] = user.user_permissions.all()
- context['permissions'] = Permission.objects.filter(group__user=user)
- context['user_id'] = user
return context
class ProjectDetailView(DetailView):
model = Project
+
class ProjectCreateView(PermissionRequiredMixin, CreateView):
model = Project
permission_required = ['projects.add_project']
diff --git a/specialization/__init__.py b/specialization/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/specialization/admin.py b/specialization/admin.py
new file mode 100644
index 0000000..fc5bce4
--- /dev/null
+++ b/specialization/admin.py
@@ -0,0 +1,5 @@
+from django.contrib import admin
+from mptt.admin import MPTTModelAdmin
+from specialization.models import Specialization
+
+admin.site.register(Specialization, MPTTModelAdmin)
\ No newline at end of file
diff --git a/specialization/apps.py b/specialization/apps.py
new file mode 100644
index 0000000..f3b60a1
--- /dev/null
+++ b/specialization/apps.py
@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class SpecializationConfig(AppConfig):
+ name = 'specialization'
diff --git a/specialization/migrations/0001_initial.py b/specialization/migrations/0001_initial.py
new file mode 100644
index 0000000..ff95c73
--- /dev/null
+++ b/specialization/migrations/0001_initial.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.6 on 2016-05-12 09:28
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Category',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('path', models.CharField(max_length=255, unique=True)),
+ ('depth', models.PositiveIntegerField()),
+ ('numchild', models.PositiveIntegerField(default=0)),
+ ('name', models.CharField(max_length=50)),
+ ],
+ options={
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/specialization/migrations/0002_auto_20160512_1013.py b/specialization/migrations/0002_auto_20160512_1013.py
new file mode 100644
index 0000000..044e9af
--- /dev/null
+++ b/specialization/migrations/0002_auto_20160512_1013.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.6 on 2016-05-12 10:13
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.db.models.manager
+import mptt.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('specialization', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Specialization',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=100)),
+ ('lft', models.PositiveIntegerField(db_index=True, editable=False)),
+ ('rght', models.PositiveIntegerField(db_index=True, editable=False)),
+ ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)),
+ ('level', models.PositiveIntegerField(db_index=True, editable=False)),
+ ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='specialization.Specialization')),
+ ],
+ options={
+ 'abstract': False,
+ },
+ managers=[
+ ('_default_manager', django.db.models.manager.Manager()),
+ ],
+ ),
+ migrations.DeleteModel(
+ name='Category',
+ ),
+ ]
diff --git a/specialization/migrations/__init__.py b/specialization/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/specialization/models.py b/specialization/models.py
new file mode 100644
index 0000000..711bc2f
--- /dev/null
+++ b/specialization/models.py
@@ -0,0 +1,19 @@
+from django.db import models
+from mptt.models import MPTTModel, TreeForeignKey
+from mptt.managers import TreeManager
+
+class Specialization(MPTTModel):
+ name = models.CharField(max_length=100)
+ parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
+
+ objects = TreeManager()
+
+ def __str__(self):
+ return self.name
+
+ class MPTTMeta:
+ order_insertion_by = ['name']
+
+
+
+
diff --git a/specialization/templates/specialization/specialization_list.html b/specialization/templates/specialization/specialization_list.html
new file mode 100644
index 0000000..2f64781
--- /dev/null
+++ b/specialization/templates/specialization/specialization_list.html
@@ -0,0 +1,30 @@
+{% extends "base.html" %}
+{% block content %}
+
Специализации
+ {% load mptt_tags %}
+{# {% for spec in object_list %}#}
+{#
{{ spec }}
#}
+{# {% endfor %}#}
+{##}
+{# {% load mptt_tags %}#}
+{#
#}
+{# {% recursetree object_list %}#}
+{# - #}
+{# {{ node.name }}#}
+{# {% if not node.is_leaf_node %}#}
+{#
#}
+{# {{ children }}#}
+{#
#}
+{# {% endif %}#}
+{# #}
+{# {% endrecursetree %}#}
+{#
#}
+ {{ root }}
+ {% for ch in children %}
+
{{ ch }}
+ {% for ch1 in ch.get_children %}
+ {{ ch1 }}
+ {% endfor %}
+ {% endfor %}
+{% endblock %}
+
diff --git a/specialization/tests.py b/specialization/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/specialization/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/specialization/urls.py b/specialization/urls.py
new file mode 100644
index 0000000..03cbe75
--- /dev/null
+++ b/specialization/urls.py
@@ -0,0 +1,8 @@
+from django.conf import urls
+# from django.contrib.auth.views import login, logout
+
+from .views import SpecListView
+
+urlpatterns = [
+ urls.url(r'^$', SpecListView.as_view(), name='spec-list'),
+]
\ No newline at end of file
diff --git a/specialization/views.py b/specialization/views.py
new file mode 100644
index 0000000..a107e37
--- /dev/null
+++ b/specialization/views.py
@@ -0,0 +1,16 @@
+from django.shortcuts import render
+from django.views.generic import ListView
+from .models import Specialization
+
+class SpecListView(ListView):
+ model = Specialization
+
+ def get_context_data(self, **kwargs):
+ context = super(SpecListView, self).get_context_data(**kwargs)
+ root = Specialization.objects.get(pk=1)
+ context['root'] = root
+ context['children'] = root.get_children()
+ context['roots'] = Specialization.objects.root_nodes()
+ return context
+
+
diff --git a/templates/registration/login.html b/templates/registration/login.html
new file mode 100644
index 0000000..38140db
--- /dev/null
+++ b/templates/registration/login.html
@@ -0,0 +1,24 @@
+{% extends 'base.html' %}
+{% block content %}
+
Вход на сайт
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/registration/registration_form.html b/templates/registration/registration_form.html
new file mode 100644
index 0000000..85a2a9c
--- /dev/null
+++ b/templates/registration/registration_form.html
@@ -0,0 +1,13 @@
+{% extends 'base.html' %}
+{% block content %}
+
Регистрация
+
+{% endblock %}
\ No newline at end of file
diff --git a/test.py b/test.py
deleted file mode 100644
index 8f7e6dd..0000000
--- a/test.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import requests
-
-urls = [
- "https://habrahabr.ru/all/",
- "https://pythondigest.ru/feed/"
-]
-
-for url in urls:
- req_info = requests.get(url)
- print(req_info.encoding)
- print(req_info.text)
\ No newline at end of file
diff --git a/users/admin.py b/users/admin.py
index 5cd50eb..480c3a8 100644
--- a/users/admin.py
+++ b/users/admin.py
@@ -1,4 +1,5 @@
from django.contrib import admin
+from guardian.admin import GuardedModelAdmin
from .models import CustomUser
-admin.site.register(CustomUser)
+admin.site.register(CustomUser, GuardedModelAdmin)
diff --git a/users/migrations/0002_auto_20160511_1135.py b/users/migrations/0002_auto_20160511_1135.py
new file mode 100644
index 0000000..20035ca
--- /dev/null
+++ b/users/migrations/0002_auto_20160511_1135.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.6 on 2016-05-11 11:35
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('users', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='customuser',
+ name='firstname',
+ field=models.CharField(blank=True, max_length=255),
+ ),
+ migrations.AddField(
+ model_name='customuser',
+ name='lastname',
+ field=models.CharField(blank=True, max_length=255),
+ ),
+ ]
diff --git a/users/models.py b/users/models.py
index 83033b9..9bc58af 100644
--- a/users/models.py
+++ b/users/models.py
@@ -2,6 +2,7 @@ from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.contrib.auth.models import PermissionsMixin
+
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None):
@@ -19,7 +20,22 @@ class CustomUserManager(BaseUserManager):
user.save(using=self._db)
return user
+
+class PerformUserManager(models.Manager):
+
+ def get_queryset(self):
+ return super(PerformUserManager, self).get_queryset().filter(groups__name='Исполнитель')
+
+
+class CustomerUserManager(models.Manager):
+
+ def get_queryset(self):
+ return super(CustomerUserManager, self).get_queryset().filter(groups__name='Заказчик')
+
+
class CustomUser(AbstractBaseUser, PermissionsMixin):
+ firstname = models.CharField(max_length=255, blank=True)
+ lastname = models.CharField(max_length=255, blank=True)
email = models.EmailField(max_length=255, unique=True, db_index=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
@@ -34,7 +50,8 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
def get_short_name(self):
return self.email
-
+ def get_full_name(self):
+ return self.firstname + ' ' + self.lastname
# def has_perm(self, perm, obj=None):
# perm = perm.split('.')[-1]
@@ -46,8 +63,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
#
def has_perm(self, perm, obj=None):
- return False
-
+ return True
def has_module_perms(self, app_label):
return self.is_admin
@@ -55,6 +71,8 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
+ perform_objects = PerformUserManager()
+ customers_objects = CustomerUserManager()
diff --git a/users/templates/users/users_info_list.html b/users/templates/users/users_info_list.html
new file mode 100644
index 0000000..3648c78
--- /dev/null
+++ b/users/templates/users/users_info_list.html
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+
+
+{% block content %}
+
Исполнители
+ {% for perf in performers %}
+
{{ perf }}
+ {% endfor %}
+
+
Заказчики
+ {% for cust in customers %}
+
{{ cust }}
+ {% endfor %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/users/templates/users/users_list.html b/users/templates/users/users_list.html
index 52843e2..fc507a8 100644
--- a/users/templates/users/users_list.html
+++ b/users/templates/users/users_list.html
@@ -1,7 +1,61 @@
{% extends "base.html" %}
+
+
{% block content %}
-
Пользователи
- {% for user in users %}
-
{{ user }}
- {% endfor %}
+
+
+
Дизайн интерьера квартиры 200m2
+
+
+ | № |
+ Кандидат |
+ Цена |
+ Срок |
+ Описание |
+ Рейтинги/отзывы |
+ Безопасные сделки |
+ Решение |
+
+ {% for user in users %}
+
+ | 1 |
+
+ {{ user.get_full_name }}
+ |
+ 35 000 |
+
+ 3 недели
+ |
+
+
+ |
+
+
+ - 23 560
+ -
+ +385
+ 0
+ - 0
+
+ -
+ СРО
+
+
+ |
+
+ 5
+ Готов работать по безопасной сделке
+ |
+
+
+ |
+
+ {% endfor %}
+
+
{% endblock %}
\ No newline at end of file
diff --git a/users/templatetags/user_tags.py b/users/templatetags/user_tags.py
new file mode 100644
index 0000000..95a95ad
--- /dev/null
+++ b/users/templatetags/user_tags.py
@@ -0,0 +1,8 @@
+from django import template
+
+register = template.Library()
+
+@register.filter('has_group')
+def has_group(user, group_name):
+ groups = user.groups.all().values_list('name', flat=True)
+ return True if group_name in groups else False
\ No newline at end of file
diff --git a/users/urls.py b/users/urls.py
index fee2b0c..c8cebe9 100644
--- a/users/urls.py
+++ b/users/urls.py
@@ -1,11 +1,12 @@
from django.conf import urls
from django.contrib.auth.views import login, logout
-from .views import UserListView , UserDetailView
+from .views import UserListView, UserDetailView, UserInfoListView
urlpatterns = [
urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'),
# urls.url(r'^login/?$', login, {'template_name': 'users/login.html'}),
# urls.url(r'^logout/?$', logout),
urls.url(r'^$', UserListView.as_view(), name='users_list'),
+ urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'),
]
\ No newline at end of file
diff --git a/users/views.py b/users/views.py
index 9208fa0..c2a1faa 100644
--- a/users/views.py
+++ b/users/views.py
@@ -1,4 +1,5 @@
from django.shortcuts import render
+from django.contrib.auth.models import Group
from django.views.generic import ListView, DetailView
from .models import CustomUser
@@ -8,5 +9,17 @@ class UserListView(ListView):
template_name = 'users/users_list.html'
context_object_name = 'users'
+
+class UserInfoListView(ListView):
+ model = CustomUser
+ template_name = 'users/users_info_list.html'
+
+ def get_context_data(self, **kwargs):
+ context = super(UserInfoListView, self).get_context_data(**kwargs)
+ context['groups'] = Group.objects.all()
+ context['performers'] = CustomUser.perform_objects.all()
+ context['customers'] = CustomUser.customers_objects.all()
+ return context
+
class UserDetailView(DetailView):
model = CustomUser
\ No newline at end of file