diff --git a/projects/forms.py b/projects/forms.py
index 7c6da07..5c795da 100644
--- a/projects/forms.py
+++ b/projects/forms.py
@@ -1,5 +1,5 @@
from django.forms import ModelForm
-from .models import Project
+from .models import Project, Portfolio
class ProjectForm(ModelForm):
class Meta:
@@ -12,3 +12,9 @@ class ProjectForm(ModelForm):
# 'user',
# 'specialization',
)
+
+
+class PortfolioForm(ModelForm):
+ class Meta:
+ model = Portfolio
+ fields = '__all__'
diff --git a/projects/migrations/0001_initial.py b/projects/migrations/0001_initial.py
index 181f75a..7191b94 100644
--- a/projects/migrations/0001_initial.py
+++ b/projects/migrations/0001_initial.py
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.9.6 on 2016-05-17 09:03
+# Generated by Django 1.9.6 on 2016-05-18 16:08
from __future__ import unicode_literals
+from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
@@ -11,7 +12,8 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
- ('specializations', '0001_initial'),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('specializations', '__first__'),
]
operations = [
@@ -21,6 +23,7 @@ class Migration(migrations.Migration):
('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(
@@ -28,6 +31,7 @@ class Migration(migrations.Migration):
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(
@@ -37,7 +41,8 @@ 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='projects', to='specializations.Specialization')),
+ ('specialization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='specializations.Specialization')),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name_plural': 'Проекты',
diff --git a/projects/migrations/0002_auto_20160517_0903.py b/projects/migrations/0002_auto_20160517_0903.py
deleted file mode 100644
index 75cc8af..0000000
--- a/projects/migrations/0002_auto_20160517_0903.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.6 on 2016-05-17 09:03
-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 = [
- ('projects', '0001_initial'),
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ]
-
- operations = [
- migrations.AddField(
- model_name='project',
- name='user',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to=settings.AUTH_USER_MODEL),
- ),
- migrations.AddField(
- model_name='portfoliophoto',
- name='portfolio',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='projects.Portfolio'),
- ),
- migrations.AddField(
- model_name='portfolio',
- name='user',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
- ),
- ]
diff --git a/projects/templates/projects/portfolio_form.html b/projects/templates/projects/portfolio_form.html
new file mode 100644
index 0000000..f2dc34a
--- /dev/null
+++ b/projects/templates/projects/portfolio_form.html
@@ -0,0 +1,18 @@
+{% extends "base.html" %}
+{% block content %}
+
Добавление
+
+{% endblock %}s
diff --git a/projects/urls.py b/projects/urls.py
index 2b24299..739e20e 100644
--- a/projects/urls.py
+++ b/projects/urls.py
@@ -1,11 +1,12 @@
from django.conf import urls
# from django.contrib.auth.views import login, logout
-from .views import ProjectListView, ProjectDetailView, ProjectCreateView
+from .views import ProjectListView, ProjectDetailView, ProjectCreateView , PortfolioCreateView
urlpatterns = [
urls.url(r'^$', ProjectListView.as_view(), name='projects-list'),
urls.url(r'^create/$', ProjectCreateView.as_view(), name='project-create'),
+ urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),
urls.url(r'(?P\d+)$', ProjectDetailView.as_view(), name='project-detail'),
-]
\ No newline at end of file
+]
diff --git a/projects/views.py b/projects/views.py
index a504fce..2f0770e 100644
--- a/projects/views.py
+++ b/projects/views.py
@@ -1,12 +1,9 @@
from django.shortcuts import render
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.views.generic import ListView, DetailView, CreateView
-from django.contrib.auth.models import Permission
-from django.contrib.auth.decorators import permission_required
-from .models import Project
-from users.models import User
-from .forms import ProjectForm
+from .models import Project, Portfolio
+from .forms import ProjectForm, PortfolioForm
class ProjectListView(ListView):
@@ -24,5 +21,16 @@ class ProjectDetailView(DetailView):
class ProjectCreateView(PermissionRequiredMixin, CreateView):
model = Project
permission_required = ['projects.add_project']
+ raise_exception = True
form_class = ProjectForm
success_url = '/projects/'
+
+
+class PortfolioCreateView(PermissionRequiredMixin, CreateView):
+ model = Portfolio
+ form_class = PortfolioForm
+ permission_required = ['projects.add_portfolio']
+ success_url = '/projects/'
+
+
+
diff --git a/specializations/migrations/0001_initial.py b/specializations/migrations/0001_initial.py
index 1c61ee0..3fd29b0 100644
--- a/specializations/migrations/0001_initial.py
+++ b/specializations/migrations/0001_initial.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.9.6 on 2016-05-17 09:03
+# Generated by Django 1.9.6 on 2016-05-18 16:08
from __future__ import unicode_literals
from django.db import migrations, models
diff --git a/users/admin.py b/users/admin.py
index c444238..33a8e74 100644
--- a/users/admin.py
+++ b/users/admin.py
@@ -1,5 +1,6 @@
from django.contrib import admin
-from .models import User
+from .models import User, Team
admin.site.register(User)
+admin.site.register(Team)
diff --git a/users/migrations/0001_initial.py b/users/migrations/0001_initial.py
index 2ec7900..13202cd 100644
--- a/users/migrations/0001_initial.py
+++ b/users/migrations/0001_initial.py
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
-# Generated by Django 1.9.6 on 2016-05-17 09:03
+# Generated by Django 1.9.6 on 2016-05-18 16:08
from __future__ import unicode_literals
+from django.conf import settings
from django.db import migrations, models
@@ -25,7 +26,6 @@ class Migration(migrations.Migration):
('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)),
- ('is_admin', models.BooleanField(default=False)),
('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')),
],
@@ -33,4 +33,12 @@ class Migration(migrations.Migration):
'abstract': False,
},
),
+ 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)),
+ ('users', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
]
diff --git a/users/models.py b/users/models.py
index 46db232..d2a74b4 100644
--- a/users/models.py
+++ b/users/models.py
@@ -15,7 +15,7 @@ class UserManager(BaseUserManager):
def create_superuser(self, email, password):
user = self.create_user(email, password)
- user.is_admin = True
+ user.is_superuser = True
user.save(using=self._db)
return user
@@ -35,12 +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)
- is_admin = models.BooleanField(default=False)
-
+
@property
def is_staff(self):
- return self.is_admin
-
+ return self.is_superuser
+
def __str__(self):
return self.email
@@ -50,24 +49,17 @@ class User(AbstractBaseUser, PermissionsMixin):
def get_full_name(self):
return self.first_name + ' ' + self.last_name
- # def has_perm(self, perm, obj=None):
- # perm = perm.split('.')[-1]
- # if self.user and not self.user.is_active:
- # return False
- # elif self.user and self.user.is_superuser:
- # return True
- # return perm in self.get_perms(obj)
- #
- #
- def has_perm(self, perm, obj=None):
- # return self.is_admin
- return True
-
- def has_module_perms(self, app_label):
- return self.is_admin
-
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
perform_objects = PerformUserManager()
customers_objects = CustomerUserManager()
+
+
+class Team(models.Model):
+ name = models.CharField(max_length=255)
+ users = models.ManyToManyField(User, blank=True)
+ owner = models.OneToOneField(User, related_name='team')
+
+ def __str__(self):
+ return self.name