diff --git a/README.md b/README.md index 500ae35..3eb2627 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ ### Setup -Install a virtualenv: +Go to a folder and install a virtualenv: ``` -virtualenv env --python python3.5 && \ -source env/bin/activate && \ -pip install --requirement humans.txt +cd path/to/venv/folder && \ +virtualenv . --python python3.5 && \ +source bin/activate && \ +pip install --requirement path/to/requirements.txt ``` ``` @@ -16,3 +17,7 @@ python manage.py migrate ``` python manage.py runserver ``` + +``` +python manage.py shell_plus --use-pythonrc +``` diff --git a/archilance/management/commands/seed_data.py b/archilance/management/commands/seed_data.py index 036bc48..1103ce6 100644 --- a/archilance/management/commands/seed_data.py +++ b/archilance/management/commands/seed_data.py @@ -1,10 +1,8 @@ # from cms_pages.models import Menu, CmsPage # from django.contrib import sites # from django.core.files import File -from django.core.management import BaseCommand # from django.db import connection # from django.db.models import Q -from django.utils import timezone # from pprint import pprint, pformat # from wagtail.wagtailcore.models import Page # import copy @@ -13,10 +11,13 @@ from django.utils import timezone # import itertools # import json # import os -import pydash as _; _.map = _.map_; _.filter = _.filter_ -import random # import requests # import util +from django.core.management import BaseCommand +from django.utils import timezone +import pydash as _; _.map = _.map_; _.filter = _.filter_ +import random +from django.contrib.auth.models import Group from users.models import User @@ -71,7 +72,10 @@ class Command(BaseCommand): is_active=_.sample((True, False)), ) - users = _.times(create_user, 100) + Group.objects.create(name='Исполнители') + Group.objects.create(name='Заказчики') + + users = _.times(create_user, 50) for user in users: user.set_password('123') diff --git a/projects/migrations/0001_initial.py b/projects/migrations/0001_initial.py new file mode 100644 index 0000000..3e88e10 --- /dev/null +++ b/projects/migrations/0001_initial.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-19 10:22 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Answer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cost', models.DecimalField(decimal_places=2, max_digits=10)), + ('cost_type', models.CharField(choices=[('RUR', 'rur'), ('USD', 'usd'), ('EUR', 'eur')], default='RUR', max_length=5)), + ('text', models.TextField()), + ('term', models.DecimalField(decimal_places=2, max_digits=10)), + ('term_type', models.CharField(choices=[('HOUR', 'hour'), ('DAY', 'day'), ('MONTH', 'month')], default='hour', max_length=10)), + ], + options={ + 'verbose_name': 'Ответ к проекту', + 'verbose_name_plural': 'Ответы к проектам', + }, + ), + 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()), + ], + ), + 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=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('price', models.DecimalField(decimal_places=2, max_digits=10)), + ('text', models.TextField(blank=True)), + ], + options={ + 'verbose_name': 'Проект', + 'verbose_name_plural': 'Проекты', + }, + ), + ] diff --git a/projects/migrations/0002_auto_20160519_1022.py b/projects/migrations/0002_auto_20160519_1022.py new file mode 100644 index 0000000..a2bcea9 --- /dev/null +++ b/projects/migrations/0002_auto_20160519_1022.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-19 10:22 +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): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('projects', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='portfolio', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='answer', + name='project', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='projects.Project'), + ), + migrations.AddField( + model_name='answer', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/requirements/humans.txt b/requirements/humans.txt index f7d1357..183e9a8 100644 --- a/requirements/humans.txt +++ b/requirements/humans.txt @@ -1,4 +1,3 @@ -#django-guardian Django django-debug-toolbar django-environ diff --git a/specializations/migrations/0001_initial.py b/specializations/migrations/0001_initial.py new file mode 100644 index 0000000..24f3999 --- /dev/null +++ b/specializations/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-19 10:22 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import mptt.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + 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='specializations.Specialization')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/users/migrations/0001_initial.py b/users/migrations/0001_initial.py new file mode 100644 index 0000000..3461989 --- /dev/null +++ b/users/migrations/0001_initial.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-19 10:22 +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): + + initial = True + + dependencies = [ + ('auth', '0007_alter_validators_add_error_messages'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('first_name', models.CharField(blank=True, max_length=255)), + ('last_name', models.CharField(blank=True, max_length=255)), + ('email', models.EmailField(db_index=True, max_length=255, unique=True)), + ('is_active', models.BooleanField(default=True)), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'Пользователь', + 'verbose_name_plural': 'Пользователи', + }, + ), + migrations.CreateModel( + name='Team', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('owner', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='team', to=settings.AUTH_USER_MODEL)), + ('users', models.ManyToManyField(blank=True, related_name='teams', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Команда', + 'verbose_name_plural': 'Команды', + }, + ), + ] diff --git a/users/models.py b/users/models.py index b979a13..b3f8e0a 100644 --- a/users/models.py +++ b/users/models.py @@ -1,7 +1,6 @@ from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, AbstractUser from django.contrib.auth.models import PermissionsMixin -from django.contrib.auth.models import Group class UserManager(BaseUserManager): @@ -36,11 +35,11 @@ class User(AbstractBaseUser, PermissionsMixin): last_name = models.CharField(max_length=255, blank=True) email = models.EmailField(max_length=255, unique=True, db_index=True) is_active = models.BooleanField(default=True) - + @property def is_staff(self): return self.is_superuser - + def __str__(self): return self.email @@ -55,7 +54,7 @@ class User(AbstractBaseUser, PermissionsMixin): objects = UserManager() perform_objects = PerformUserManager() customers_objects = CustomerUserManager() - + class Meta: verbose_name = 'Пользователь' verbose_name_plural = 'Пользователи' @@ -65,10 +64,10 @@ class Team(models.Model): name = models.CharField(max_length=255) users = models.ManyToManyField(User, related_name ='teams', blank=True) owner = models.OneToOneField(User, related_name='team', null=True) - + def __str__(self): return self.name - + class Meta: verbose_name = 'Команда' verbose_name_plural = 'Команды'