commit
95b2beec5a
29 changed files with 491 additions and 235 deletions
@ -1,2 +1,4 @@ |
|||||||
*.pyc |
*.pyc |
||||||
.idea/ |
.idea/ |
||||||
|
env/ |
||||||
|
|
||||||
|
|||||||
@ -1,135 +0,0 @@ |
|||||||
import rest_framework_filters import FilterSet |
|
||||||
|
|
||||||
|
|
||||||
class Project(FilterSet): |
|
||||||
class Meta: |
|
||||||
model = |
|
||||||
# |
|
||||||
# from common import models |
|
||||||
# |
|
||||||
# |
|
||||||
# class Category(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.Category |
|
||||||
# |
|
||||||
# # icon = ... |
|
||||||
# adverts = filters.RelatedFilter('api.filters.Advert') |
|
||||||
# children = filters.RelatedFilter('api.filters.Category') |
|
||||||
# hidden = filters.AllLookupsFilter() |
|
||||||
# level = filters.AllLookupsFilter() |
|
||||||
# lft = filters.AllLookupsFilter() |
|
||||||
# name = filters.AllLookupsFilter() |
|
||||||
# parent = filters.RelatedFilter('api.filters.Category') |
|
||||||
# rght = filters.AllLookupsFilter() |
|
||||||
# slug = filters.AllLookupsFilter() |
|
||||||
# tree_id = filters.AllLookupsFilter() |
|
||||||
# |
|
||||||
# |
|
||||||
# class Advert(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.Advert |
|
||||||
# |
|
||||||
# body = filters.AllLookupsFilter() |
|
||||||
# category = filters.RelatedFilter('api.filters.Category') |
|
||||||
# colors = filters.RelatedFilter('api.filters.Color') |
|
||||||
# contact_name = filters.AllLookupsFilter() |
|
||||||
# contact_phone = filters.RelatedFilter('api.filters.ContactPhone') |
|
||||||
# created_at = filters.AllLookupsFilter() |
|
||||||
# expires_at = filters.AllLookupsFilter() |
|
||||||
# gender = filters.AllLookupsFilter() |
|
||||||
# id = filters.AllLookupsFilter() |
|
||||||
# initial_price = filters.AllLookupsFilter() |
|
||||||
# location = filters.RelatedFilter('api.filters.Location') |
|
||||||
# pictures = filters.RelatedFilter('api.filters.AdvertPicture') |
|
||||||
# price = filters.AllLookupsFilter() |
|
||||||
# promos = filters.RelatedFilter('api.filters.Promo') |
|
||||||
# receive_email_notifications = filters.AllLookupsFilter() |
|
||||||
# reservation = filters.RelatedFilter('api.filters.Reservation') |
|
||||||
# saved_by = filters.RelatedFilter('api.filters.User') |
|
||||||
# state = filters.AllLookupsFilter() |
|
||||||
# title = filters.AllLookupsFilter() |
|
||||||
# updated_at = filters.AllLookupsFilter() |
|
||||||
# user = filters.RelatedFilter('api.filters.User') |
|
||||||
# |
|
||||||
# |
|
||||||
# class AdvertPicture(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.AdvertPicture |
|
||||||
# |
|
||||||
# # file = ... |
|
||||||
# active = filters.AllLookupsFilter() |
|
||||||
# advert = filters.RelatedFilter('api.filters.Advert') |
|
||||||
# id = filters.AllLookupsFilter() |
|
||||||
# main = filters.AllLookupsFilter() |
|
||||||
# uploaded_at = filters.AllLookupsFilter() |
|
||||||
# user = filters.RelatedFilter('api.filters.User') |
|
||||||
# |
|
||||||
# |
|
||||||
# class Color(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.Color |
|
||||||
# |
|
||||||
# id = filters.AllLookupsFilter() |
|
||||||
# name = filters.AllLookupsFilter() |
|
||||||
# value = filters.AllLookupsFilter() |
|
||||||
# |
|
||||||
# |
|
||||||
# class Location(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.Location |
|
||||||
# |
|
||||||
# adverts = filters.RelatedFilter('api.filters.Advert') |
|
||||||
# # children = filters.RelatedFilter('api.filters.Location') |
|
||||||
# id = filters.AllLookupsFilter() |
|
||||||
# level = filters.AllLookupsFilter() |
|
||||||
# lft = filters.AllLookupsFilter() |
|
||||||
# name = filters.AllLookupsFilter() |
|
||||||
# parent = filters.RelatedFilter('api.filters.Location') |
|
||||||
# rght = filters.AllLookupsFilter() |
|
||||||
# subway_line_color = filters.AllLookupsFilter() |
|
||||||
# tree_id = filters.AllLookupsFilter() |
|
||||||
# type = filters.AllLookupsFilter() |
|
||||||
# users = filters.RelatedFilter('api.filters.User') |
|
||||||
# |
|
||||||
# |
|
||||||
# class User(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.User |
|
||||||
# |
|
||||||
# adverts = filters.RelatedFilter('api.filters.Advert') |
|
||||||
# contact_phones = filters.RelatedFilter('api.filters.ContactPhone') |
|
||||||
# date_joined = filters.AllLookupsFilter() |
|
||||||
# email = filters.AllLookupsFilter() |
|
||||||
# first_name = filters.AllLookupsFilter() |
|
||||||
# id = filters.AllLookupsFilter() |
|
||||||
# is_active = filters.AllLookupsFilter() |
|
||||||
# is_staff = filters.AllLookupsFilter() |
|
||||||
# is_superuser = filters.AllLookupsFilter() |
|
||||||
# last_login = filters.AllLookupsFilter() |
|
||||||
# location = filters.RelatedFilter('api.filters.Location') |
|
||||||
# password = filters.AllLookupsFilter() |
|
||||||
# promos = filters.RelatedFilter('api.filters.Promo') |
|
||||||
# social_auth_id = filters.AllLookupsFilter() |
|
||||||
# subscribed_to_newsletter = filters.AllLookupsFilter() |
|
||||||
# type = filters.AllLookupsFilter() |
|
||||||
# username = filters.AllLookupsFilter() |
|
||||||
# |
|
||||||
# |
|
||||||
# class ContactPhone(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.ContactPhone |
|
||||||
# |
|
||||||
# |
|
||||||
# class Reservation(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.Reservation |
|
||||||
# |
|
||||||
# |
|
||||||
# class Promo(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.Promo |
|
||||||
# |
|
||||||
# |
|
||||||
# class PromoType(filters.FilterSet): |
|
||||||
# class Meta: |
|
||||||
# model = models.PromoType |
|
||||||
@ -1,51 +0,0 @@ |
|||||||
from rest_framework.serializers import ModelSerializer |
|
||||||
|
|
||||||
from projects.models import Project |
|
||||||
from specializations.models import Specialization |
|
||||||
from users.models import CustomUser |
|
||||||
|
|
||||||
|
|
||||||
class CustomUserSerializer(ModelSerializer): |
|
||||||
class Meta: |
|
||||||
model = CustomUser |
|
||||||
|
|
||||||
fields = ( |
|
||||||
'id', |
|
||||||
'email', |
|
||||||
'firstname', |
|
||||||
'is_active', |
|
||||||
'is_admin', |
|
||||||
'lastname', |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
class SpecializationSerializer(ModelSerializer): |
|
||||||
class Meta: |
|
||||||
model = Specialization |
|
||||||
|
|
||||||
fields = ( |
|
||||||
'id', |
|
||||||
'level', |
|
||||||
'lft', |
|
||||||
'name', |
|
||||||
'parent', |
|
||||||
'rght', |
|
||||||
'tree_id', |
|
||||||
) |
|
||||||
|
|
||||||
|
|
||||||
class ProjectSerializer(ModelSerializer): |
|
||||||
class Meta: |
|
||||||
model = Project |
|
||||||
|
|
||||||
fields = ( |
|
||||||
'id', |
|
||||||
'name', |
|
||||||
'price', |
|
||||||
'specialization', |
|
||||||
'text', |
|
||||||
'user', |
|
||||||
) |
|
||||||
|
|
||||||
user = CustomUserSerializer() |
|
||||||
specialization = SpecializationSerializer() |
|
||||||
@ -1,8 +1,12 @@ |
|||||||
from rest_framework import routers |
from rest_framework import routers |
||||||
|
|
||||||
from .views import ProjectViewSet |
from .views import ProjectViewSet, SpecializationViewSet, UserViewSet |
||||||
|
|
||||||
|
|
||||||
router = routers.DefaultRouter() |
router = routers.DefaultRouter() |
||||||
|
|
||||||
router.register(r'projects', ProjectViewSet) |
router.register(r'projects', ProjectViewSet) |
||||||
|
router.register(r'specializations', SpecializationViewSet) |
||||||
|
router.register(r'users', UserViewSet) |
||||||
|
|
||||||
urlpatterns = router.urls |
urlpatterns = router.urls |
||||||
|
|||||||
@ -1,10 +1,31 @@ |
|||||||
from rest_framework.viewsets import ModelViewSet |
from rest_framework.viewsets import ModelViewSet |
||||||
|
|
||||||
from projects.models import Project |
from projects.models import Project |
||||||
from .serializers import ProjectSerializer |
from projects.serializers import ProjectSerializer |
||||||
# from .filters import ProjectFilter |
from projects.filters import ProjectFilterSet |
||||||
|
|
||||||
|
from specializations.models import Specialization |
||||||
|
from specializations.serializers import SpecializationSerializer |
||||||
|
from specializations.filters import SpecializationFilterSet |
||||||
|
|
||||||
|
from users.models import User |
||||||
|
from users.serializers import UserSerializer |
||||||
|
from users.filters import UserFilterSet |
||||||
|
|
||||||
|
|
||||||
class ProjectViewSet(ModelViewSet): |
class ProjectViewSet(ModelViewSet): |
||||||
queryset = Project.objects.all() |
queryset = Project.objects.all() |
||||||
serializer_class = ProjectSerializer |
serializer_class = ProjectSerializer |
||||||
# filter_class = ProjectFilter |
filter_class = ProjectFilterSet |
||||||
|
|
||||||
|
|
||||||
|
class SpecializationViewSet(ModelViewSet): |
||||||
|
queryset = Specialization.objects.all() |
||||||
|
serializer_class = SpecializationSerializer |
||||||
|
filter_class = SpecializationFilterSet |
||||||
|
|
||||||
|
|
||||||
|
class UserViewSet(ModelViewSet): |
||||||
|
queryset = User.objects.all() |
||||||
|
serializer_class = UserSerializer |
||||||
|
filter_class = UserFilterSet |
||||||
|
|||||||
@ -0,0 +1,78 @@ |
|||||||
|
# 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 |
||||||
|
# import eav.models |
||||||
|
# import inspect |
||||||
|
# import itertools |
||||||
|
# import json |
||||||
|
# import os |
||||||
|
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||||
|
import random |
||||||
|
# import requests |
||||||
|
# import util |
||||||
|
|
||||||
|
from users.models import User |
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand): |
||||||
|
def handle(self, *args, **options): |
||||||
|
print('---------------------------------------') |
||||||
|
print('Generating data...') |
||||||
|
print('---------------------------------------') |
||||||
|
|
||||||
|
|
||||||
|
def take(coll, n): |
||||||
|
chunk = coll[0:n] |
||||||
|
del coll[0:n] |
||||||
|
return chunk |
||||||
|
|
||||||
|
def take_random(coll, n): |
||||||
|
if n == 0: |
||||||
|
return [] |
||||||
|
|
||||||
|
chunk = _.sample(coll, n) |
||||||
|
|
||||||
|
for item in chunk: |
||||||
|
coll.remove(item) |
||||||
|
|
||||||
|
return chunk |
||||||
|
|
||||||
|
def take_one_random(coll): |
||||||
|
if len(coll) == 0: |
||||||
|
return None |
||||||
|
|
||||||
|
return coll.pop(_.random(0, len(coll)-1)) |
||||||
|
|
||||||
|
def random_phone(): |
||||||
|
return '+7' + str(_.sample((917, 964, 965, 987, 912, 935))) + str(_.random(1000000, 9999999)) |
||||||
|
|
||||||
|
def random_date(): |
||||||
|
return timezone.datetime(_.random(2012, 2018), _.random(1, 12), _.random(1, 28)) |
||||||
|
|
||||||
|
def random_amount(): |
||||||
|
return random.random() * random.choice((100, 1000, 10000)) |
||||||
|
|
||||||
|
|
||||||
|
User.objects.create_superuser('admin@example.com', '123456') |
||||||
|
|
||||||
|
def create_user(i): |
||||||
|
username = 'user-%s' % i |
||||||
|
|
||||||
|
return User.objects.create( |
||||||
|
first_name='User-%s' % i, |
||||||
|
email='%s@example.com' % username, |
||||||
|
is_active=_.sample((True, False)), |
||||||
|
) |
||||||
|
|
||||||
|
users = _.times(create_user, 100) |
||||||
|
|
||||||
|
for user in users: |
||||||
|
user.set_password('123') |
||||||
|
user.save() |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
window.g = window |
||||||
|
|
||||||
|
var app = angular.module('app', []) |
||||||
|
|
||||||
|
|
||||||
|
app.config(['$interpolateProvider', '$httpProvider', |
||||||
|
function($interpolateProvider, $httpProvider) { |
||||||
|
$interpolateProvider.startSymbol('{(') |
||||||
|
$interpolateProvider.endSymbol(')}') |
||||||
|
|
||||||
|
$httpProvider.defaults.xsrfCookieName = 'csrftoken' |
||||||
|
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken' |
||||||
|
|
||||||
|
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest' |
||||||
|
|
||||||
|
//$routeProvider.when('/', {templateUrl: '.....'})
|
||||||
|
}, |
||||||
|
]) |
||||||
|
|
||||||
|
|
||||||
|
app.run(['$rootScope', '$timeout', '$http', |
||||||
|
function run($rootScope, $timeout, $http) { |
||||||
|
g.$http = $http // Debug
|
||||||
|
g.$timeout = $timeout // Debug
|
||||||
|
}, |
||||||
|
]) |
||||||
|
|
||||||
|
|
||||||
|
app.controller('TestCtrl', ['$scope', '$http', function TestCtrl($scope, $http) { |
||||||
|
var test = g.test = this |
||||||
|
|
||||||
|
$http.get('/api/users/?is_admin=False').then(function(res) { |
||||||
|
test.users = res.data.results |
||||||
|
}) |
||||||
|
}]) |
||||||
@ -0,0 +1,12 @@ |
|||||||
|
from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter |
||||||
|
from .models import Project |
||||||
|
|
||||||
|
class ProjectFilterSet(FilterSet): |
||||||
|
name = AllLookupsFilter() |
||||||
|
price = AllLookupsFilter() |
||||||
|
text = AllLookupsFilter() |
||||||
|
user = RelatedFilter('users.filters.UserFilterSet') |
||||||
|
specialization = RelatedFilter('specializations.filters.SpecializationFilterSet') |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Project |
||||||
@ -0,0 +1,47 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.6 on 2016-05-17 09:03 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
import django.db.models.deletion |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
initial = True |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('specializations', '0001_initial'), |
||||||
|
] |
||||||
|
|
||||||
|
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()), |
||||||
|
], |
||||||
|
), |
||||||
|
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')), |
||||||
|
], |
||||||
|
), |
||||||
|
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)), |
||||||
|
('specialization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='specializations.Specialization')), |
||||||
|
], |
||||||
|
options={ |
||||||
|
'verbose_name_plural': 'Проекты', |
||||||
|
'verbose_name': 'Проект', |
||||||
|
}, |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
# -*- 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), |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
from rest_framework.serializers import ModelSerializer |
||||||
|
|
||||||
|
from .models import Project |
||||||
|
from specializations.serializers import SpecializationSerializer |
||||||
|
from users.serializers import UserSerializer |
||||||
|
|
||||||
|
class ProjectSerializer(ModelSerializer): |
||||||
|
user = UserSerializer() |
||||||
|
specialization = SpecializationSerializer() |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Project |
||||||
|
|
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'name', |
||||||
|
'price', |
||||||
|
'specialization', |
||||||
|
'text', |
||||||
|
'user', |
||||||
|
) |
||||||
|
|
||||||
|
def create(self, validated_data): |
||||||
|
return Project.objects.create(**validated_data) |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter |
||||||
|
from .models import Specialization |
||||||
|
|
||||||
|
class SpecializationFilterSet(FilterSet): |
||||||
|
id = AllLookupsFilter() |
||||||
|
children = RelatedFilter('specializations.filters.SpecializationFilterSet') |
||||||
|
level = AllLookupsFilter() |
||||||
|
lft = AllLookupsFilter() |
||||||
|
name = AllLookupsFilter() |
||||||
|
parent = RelatedFilter('specializations.filters.SpecializationFilterSet') |
||||||
|
projects = RelatedFilter('projects.filters.ProjectFilterSet') |
||||||
|
rght = AllLookupsFilter() |
||||||
|
tree_id = AllLookupsFilter() |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Specialization |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.6 on 2016-05-17 09:03 |
||||||
|
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, |
||||||
|
}, |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
from rest_framework.serializers import ModelSerializer |
||||||
|
|
||||||
|
from .models import Specialization |
||||||
|
|
||||||
|
|
||||||
|
class SpecializationSerializer(ModelSerializer): |
||||||
|
class Meta: |
||||||
|
model = Specialization |
||||||
|
|
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'children', |
||||||
|
'level', |
||||||
|
'lft', |
||||||
|
'name', |
||||||
|
'parent', |
||||||
|
'projects', |
||||||
|
'rght', |
||||||
|
'tree_id', |
||||||
|
) |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
{% load staticfiles %} |
||||||
|
|
||||||
|
<!doctype html> |
||||||
|
<html ng-app='app'> |
||||||
|
<head> |
||||||
|
<meta charset='utf-8'> |
||||||
|
<meta http-equiv='X-UA-Compatible' content='IE=edge, chrome=1'> |
||||||
|
<meta name='viewport' content='width=device-width, initial-scale=1'> |
||||||
|
<meta name='viewport' content='initial-scale=1.0, user-scalable=no, maximum-scale=1'> |
||||||
|
<title></title> |
||||||
|
|
||||||
|
<style>[ng-cloak] {display: none !important}</style> <!-- Prevent Angular from displaying unrendered template expressions --> |
||||||
|
|
||||||
|
<!--<link rel='stylesheet' href='/assets/css/style.css'>--> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body> |
||||||
|
{% block content %}{% endblock %} |
||||||
|
|
||||||
|
<!--<script src='/assets/lib/lodash/lodash.js'></script> |
||||||
|
<script src='/assets/lib/lodash/lodash.fp.js'></script>--> |
||||||
|
<script src='{% static 'lib/angular/angular.js' %}'></script> |
||||||
|
<script src='{% static 'index.js' %}'></script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
{% extends '_layout.html' %} |
||||||
|
|
||||||
|
{% load staticfiles %} |
||||||
|
|
||||||
|
{% block content %} |
||||||
|
<div ng-controller='TestCtrl as test'> |
||||||
|
<ul ng-repeat='user in test.users'> |
||||||
|
<li>{( user.first_name )}</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
{% endblock %} |
||||||
@ -1,5 +1,5 @@ |
|||||||
from django.contrib import admin |
from django.contrib import admin |
||||||
|
|
||||||
from .models import CustomUser |
from .models import User |
||||||
|
|
||||||
admin.site.register(CustomUser) |
admin.site.register(User) |
||||||
|
|||||||
@ -0,0 +1,14 @@ |
|||||||
|
from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter |
||||||
|
from .models import User |
||||||
|
|
||||||
|
class UserFilterSet(FilterSet): |
||||||
|
id = AllLookupsFilter() |
||||||
|
email = AllLookupsFilter() |
||||||
|
first_name = AllLookupsFilter() |
||||||
|
is_active = AllLookupsFilter() |
||||||
|
is_admin = AllLookupsFilter() |
||||||
|
last_name = AllLookupsFilter() |
||||||
|
projects = RelatedFilter('projects.filters.ProjectFilterSet') |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = User |
||||||
@ -0,0 +1,36 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.6 on 2016-05-17 09:03 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
|
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)), |
||||||
|
('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')), |
||||||
|
], |
||||||
|
options={ |
||||||
|
'abstract': False, |
||||||
|
}, |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,41 @@ |
|||||||
|
from rest_framework.serializers import ModelSerializer |
||||||
|
|
||||||
|
from .models import User |
||||||
|
from projects.models import Project |
||||||
|
|
||||||
|
|
||||||
|
class UserSerializer(ModelSerializer): |
||||||
|
class Meta: |
||||||
|
model = User |
||||||
|
|
||||||
|
fields = ( |
||||||
|
'id', |
||||||
|
'email', |
||||||
|
'first_name', |
||||||
|
'is_active', |
||||||
|
'is_admin', |
||||||
|
'last_name', |
||||||
|
'projects', |
||||||
|
) |
||||||
|
|
||||||
|
read_only_fields = ( |
||||||
|
'is_active', |
||||||
|
'is_admin', |
||||||
|
'projects', |
||||||
|
) |
||||||
|
|
||||||
|
def create(self, validated_data): |
||||||
|
return User.objects.create(**validated_data) |
||||||
|
|
||||||
|
# def update(self, inst, validated_data): |
||||||
|
# inst.email = validated_data.get('email', inst.email) |
||||||
|
# inst.first_name = validated_data.get('first_name', inst.first_name) |
||||||
|
# inst.is_active = validated_data.get('is_active', inst.is_active) |
||||||
|
# inst.last_name = validated_data.get('last_name', inst.last_name) |
||||||
|
# # inst.projects = validated_data.get('projects', inst.projects) |
||||||
|
# |
||||||
|
# inst.save() |
||||||
|
# |
||||||
|
# return inst |
||||||
|
|
||||||
|
# import code; code.interact(local=dict(globals(), **locals())) |
||||||
@ -1,25 +1,25 @@ |
|||||||
from django.shortcuts import render |
from django.shortcuts import render |
||||||
from django.contrib.auth.models import Group |
from django.contrib.auth.models import Group |
||||||
from django.views.generic import ListView, DetailView |
from django.views.generic import ListView, DetailView |
||||||
from .models import CustomUser |
from .models import User |
||||||
|
|
||||||
|
|
||||||
class UserListView(ListView): |
class UserListView(ListView): |
||||||
model = CustomUser |
model = User |
||||||
template_name = 'users/users_list.html' |
template_name = 'users/users_list.html' |
||||||
context_object_name = 'users' |
context_object_name = 'users' |
||||||
|
|
||||||
|
|
||||||
class UserInfoListView(ListView): |
class UserInfoListView(ListView): |
||||||
model = CustomUser |
model = User |
||||||
template_name = 'users/users_info_list.html' |
template_name = 'users/users_info_list.html' |
||||||
|
|
||||||
def get_context_data(self, **kwargs): |
def get_context_data(self, **kwargs): |
||||||
context = super(UserInfoListView, self).get_context_data(**kwargs) |
context = super(UserInfoListView, self).get_context_data(**kwargs) |
||||||
context['groups'] = Group.objects.all() |
context['groups'] = Group.objects.all() |
||||||
context['performers'] = CustomUser.perform_objects.all() |
context['performers'] = User.perform_objects.all() |
||||||
context['customers'] = CustomUser.customers_objects.all() |
context['customers'] = User.customers_objects.all() |
||||||
return context |
return context |
||||||
|
|
||||||
class UserDetailView(DetailView): |
class UserDetailView(DetailView): |
||||||
model = CustomUser |
model = User |
||||||
|
|||||||
Loading…
Reference in new issue