From 75d7a13444d8dff013edac6d0be94efb54d35b40 Mon Sep 17 00:00:00 2001 From: ArturBaybulatov Date: Fri, 20 May 2016 11:35:40 +0300 Subject: [PATCH] Update --- archilance/management/commands/seed_data.py | 43 +++++++++++++++++-- projects/forms.py | 5 +-- .../migrations/0003_auto_20160519_1312.py | 30 +++++++++++++ .../migrations/0004_auto_20160519_1338.py | 21 +++++++++ projects/models.py | 28 ++++++------ projects/serializers.py | 8 ++-- projects/views.py | 16 ++++--- users/admin.py | 2 +- users/migrations/0002_team_groups.py | 21 +++++++++ users/models.py | 5 +-- 10 files changed, 145 insertions(+), 34 deletions(-) create mode 100644 projects/migrations/0003_auto_20160519_1312.py create mode 100644 projects/migrations/0004_auto_20160519_1338.py create mode 100644 users/migrations/0002_team_groups.py diff --git a/archilance/management/commands/seed_data.py b/archilance/management/commands/seed_data.py index 04bfe24..b083634 100644 --- a/archilance/management/commands/seed_data.py +++ b/archilance/management/commands/seed_data.py @@ -13,12 +13,19 @@ # import os # import requests # import util + +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 pydash as _; + +_.map = _.map_; _.filter = _.filter_ import random -from django.contrib.auth.models import Group +from projects.models import Project +from registration.models import RegistrationProfile +from specializations.models import Specialization from users.models import User @@ -63,8 +70,36 @@ class Command(BaseCommand): User.objects.create_superuser('admin@example.com', '123456') - customer_group = Group.objects.create(name='Исполнители') - contractor_group = Group.objects.create(name='Заказчики') + contractor_group = Group.objects.create(name='Исполнители') + customer_group = Group.objects.create(name='Заказчики') + + # ct_proj = ContentType.objects.get_for_model(Project) + # ct_spec = ContentType.objects.get_for_model(Specialization) + # ct_register = ContentType.objects.get_for_model(RegistrationProfile) + # + # + # proj_perms = Permission.objects.filter(content_type=ct_proj) + # spec_perms = Permission.objects.filter(content_type=ct_spec) + # ct_register = Permission.objects.filter(content_type=ct_register) + # + # contractor_group.permissions.add(spec_perms, ct_register) + # customer_group.permissions.add(proj_perms, spec_perms, ct_register) + + + + _root = Specialization.objects.create(name='_root') + + stages = ('A','B','C','D') + + for s1 in stages: + x = Specialization.objects.create(name='Стадия %s' % s1, parent=_root) + for s2 in stages: + y = Specialization.objects.create(name='Стадия %s-%s' % (s1,s2), parent=x) + for s3 in stages: + z = Specialization.objects.create(name='Стадия %s-%s-%s' % (s1,s2,s3), parent=y) + for s4 in stages: + Specialization.objects.create(name='Стадия %s-%s-%s-%s' % (s1,s2,s3,s4), parent=z) + def create_user(i): username = 'user-%s' % i diff --git a/projects/forms.py b/projects/forms.py index 5c795da..e8dd847 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -7,10 +7,9 @@ class ProjectForm(ModelForm): fields = ( 'name', - 'text', 'price', - # 'user', - # 'specialization', + 'specialization', + 'text', ) diff --git a/projects/migrations/0003_auto_20160519_1312.py b/projects/migrations/0003_auto_20160519_1312.py new file mode 100644 index 0000000..098a86d --- /dev/null +++ b/projects/migrations/0003_auto_20160519_1312.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-19 13:12 +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 = [ + ('specializations', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('projects', '0002_auto_20160519_1022'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='specialization', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='specializations.Specialization'), + ), + migrations.AddField( + model_name='project', + name='user', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + ] diff --git a/projects/migrations/0004_auto_20160519_1338.py b/projects/migrations/0004_auto_20160519_1338.py new file mode 100644 index 0000000..7370c40 --- /dev/null +++ b/projects/migrations/0004_auto_20160519_1338.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-19 13:38 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0003_auto_20160519_1312'), + ] + + operations = [ + migrations.AlterField( + model_name='project', + name='specialization', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='specializations.Specialization'), + ), + ] diff --git a/projects/models.py b/projects/models.py index 7112416..127fbe5 100644 --- a/projects/models.py +++ b/projects/models.py @@ -7,13 +7,13 @@ from specializations.models import Specialization class Project(models.Model): name = models.CharField(max_length=255) price = models.DecimalField(max_digits=10, decimal_places=2) + specialization = models.ForeignKey(Specialization, related_name='projects') text = models.TextField(blank=True) - # user = models.ForeignKey(User, related_name='projects') - # specialization = models.ForeignKey(Specialization, related_name='projects', blank=True, null=True) # TODO: Make required + user = models.ForeignKey(User, related_name='projects') - # type_work = models.CharField() # budget = models.CharField() # cro = models.BooleanField(default=False) + # type_work = models.CharField() def __str__(self): return self.name @@ -25,28 +25,28 @@ class Project(models.Model): class Answer(models.Model): COST_TYPE_CHOICES = ( - ('RUR', 'rur'), - ('USD', 'usd'), - ('EUR', 'eur'), + ('rur', 'rur'), + ('usd', 'usd'), + ('eur', 'eur'), ) - + TERM_TYPE_CHOICES = ( - ('HOUR', 'hour'), - ('DAY', 'day'), - ('MONTH', 'month'), - + ('hour', 'hour'), + ('day', 'day'), + ('month', 'month'), ) + cost = models.DecimalField(max_digits=10, decimal_places=2) cost_type = models.CharField(max_length=5, choices=COST_TYPE_CHOICES, default='RUR') text = models.TextField() term = models.DecimalField(max_digits=10, decimal_places=2) - term_type = models.CharField(max_length=10, choices=TERM_TYPE_CHOICES, default='hour') + term_type = models.CharField(max_length=10, choices=TERM_TYPE_CHOICES, default='HOUR') project = models.ForeignKey(Project, related_name='answers') user = models.ForeignKey(User, related_name='answers') - + def __str__(self): return self.text - + class Meta: verbose_name = 'Ответ к проекту' verbose_name_plural = 'Ответы к проектам' diff --git a/projects/serializers.py b/projects/serializers.py index ad61964..8ed0111 100755 --- a/projects/serializers.py +++ b/projects/serializers.py @@ -5,17 +5,17 @@ from specializations.serializers import SpecializationSerializer from users.serializers import UserSerializer class ProjectSerializer(ModelSerializer): - # specialization = SpecializationSerializer() - # user = UserSerializer() + specialization = SpecializationSerializer() + user = UserSerializer() class Meta: model = Project fields = ( 'id', - # 'specialization', - # 'user', 'name', 'price', + 'specialization', 'text', + 'user', ) diff --git a/projects/views.py b/projects/views.py index 2f0770e..18b1714 100644 --- a/projects/views.py +++ b/projects/views.py @@ -20,17 +20,23 @@ class ProjectDetailView(DetailView): class ProjectCreateView(PermissionRequiredMixin, CreateView): model = Project - permission_required = ['projects.add_project'] + permission_required = ('projects.add_project',) raise_exception = True form_class = ProjectForm - success_url = '/projects/' + success_url = '/projects/' # TODO: Use `reverse_lazy('projects-list')` from `django.core.urlresolvers` + + def form_valid(self, form): + project = form.instance + project.user = self.request.user + project.save() + + return super().form_valid(form) class PortfolioCreateView(PermissionRequiredMixin, CreateView): model = Portfolio form_class = PortfolioForm - permission_required = ['projects.add_portfolio'] + permission_required = ('projects.add_portfolio',) success_url = '/projects/' - - +# import code; code.interact(local=dict(globals(), **locals())) diff --git a/users/admin.py b/users/admin.py index fee8707..0cc2a0b 100644 --- a/users/admin.py +++ b/users/admin.py @@ -5,7 +5,7 @@ from .models import User, Team class UserAdmin(admin.ModelAdmin): readonly_fields = ('pk',) - list_display = ('email','get_groups','is_active') + list_display = ('email','get_groups','is_active',) def get_groups(self, obj): return ', '.join(g.name for g in obj.groups.all()) diff --git a/users/migrations/0002_team_groups.py b/users/migrations/0002_team_groups.py new file mode 100644 index 0000000..54251cc --- /dev/null +++ b/users/migrations/0002_team_groups.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-19 14:52 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0007_alter_validators_add_error_messages'), + ('users', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='team', + name='groups', + field=models.ManyToManyField(blank=True, related_name='teams', to='auth.Group'), + ), + ] diff --git a/users/models.py b/users/models.py index b3f8e0a..3014677 100644 --- a/users/models.py +++ b/users/models.py @@ -1,7 +1,5 @@ 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 AbstractBaseUser, BaseUserManager, AbstractUser, Group, PermissionsMixin class UserManager(BaseUserManager): def create_user(self, email, password=None): @@ -64,6 +62,7 @@ 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) + groups = models.ManyToManyField(Group, related_name='teams', blank=True) def __str__(self): return self.name