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 %}

Добавление

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

{{ form.name.errors.as_text }}

- -

{{ form.price.errors.as_text }}

- -

{{ form.text.errors.as_text }}

- + + {% for field in form %} +
+ {{ field.label }} + {{ field }} +
+ {% endfor %} +{# {% for field in form %}#} +{#
#} +{# #} +{#
#} +{##} +{# {% endfor %}#} + +{# #} +{#

{{ form.name.errors.as_text }}

#} +{# #} +{#

{{ form.price.errors.as_text }}

#} +{# #} +{#

{{ form.text.errors.as_text }}

#} +{# #} +{# #}
{% 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 %}#} +{##} + {{ 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 %} +

Вход на сайт

+
+ {% csrf_token %} + {{ form.errors }} +
+
+ +
+
+ +
+
+ +
+
+ +{# {{ form.as_p }}#} + + + +
+{% 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 %} +

Регистрация

+
+ {% for field in form %} +
+ {{ field.label }} + {{ field }} +
+ {% endfor %} + +
+{% 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 %} + + + + + + + + + + + {% endfor %} +
КандидатЦенаСрокОписаниеРейтинги/отзывыБезопасные сделкиРешение
1 + {{ user.get_full_name }} + 35 000 + 3
недели +
+ + +
    +
  • 23 560
  • +
  • + +385 + 0 + - 0 +
  • +
  • + СРО +
  • +
+
+ 5
+ Готов работать по безопасной сделке +
+
+
+
+
+
+
+
+
{% 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