From c2db336f74398853ce61853b63bb54a8917f1307 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Tue, 21 Jun 2016 09:59:23 +0300 Subject: [PATCH] #ARC-11 add common api --- api/urls.py | 3 +- api/views.py | 10 ++ common/filters.py | 17 ++++ common/serializers.py | 20 ++++ projects/templates/_trash/project_form.html | 1 + templates/partials/base.html | 1 + users/forms.py | 11 +- users/mixins.py | 16 +-- users/models.py | 4 +- users/templates/contractor_profile_edit.html | 100 +++++++++++++++++-- 10 files changed, 160 insertions(+), 23 deletions(-) create mode 100644 common/filters.py create mode 100644 common/serializers.py diff --git a/api/urls.py b/api/urls.py index cc5dd5a..5dba548 100755 --- a/api/urls.py +++ b/api/urls.py @@ -1,6 +1,6 @@ from rest_framework import routers -from .views import ProjectViewSet, SpecializationViewSet, UserViewSet +from .views import ProjectViewSet, SpecializationViewSet, UserViewSet, LocationViewSet router = routers.DefaultRouter() @@ -8,5 +8,6 @@ router = routers.DefaultRouter() router.register(r'projects', ProjectViewSet) router.register(r'specializations', SpecializationViewSet) router.register(r'users', UserViewSet) +router.register(r'location', LocationViewSet) urlpatterns = router.urls diff --git a/api/views.py b/api/views.py index 965a621..cd815e7 100755 --- a/api/views.py +++ b/api/views.py @@ -12,6 +12,9 @@ from users.models import User from users.serializers import UserSerializer from users.filters import UserFilterSet +from common.models import Location +from common.serializers import LocationSerializer +from common.filters import LocationFilterSet class ProjectViewSet(ModelViewSet): queryset = Project.objects.all() @@ -29,3 +32,10 @@ class UserViewSet(ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer filter_class = UserFilterSet + + +class LocationViewSet(ModelViewSet): + queryset = Location.objects.all() + serializer_class = LocationSerializer + filter_class = LocationFilterSet + diff --git a/common/filters.py b/common/filters.py new file mode 100644 index 0000000..ec7adf7 --- /dev/null +++ b/common/filters.py @@ -0,0 +1,17 @@ +from rest_framework_filters import FilterSet, AllLookupsFilter, RelatedFilter +from .models import Location + + +class LocationFilterSet(FilterSet): + id = AllLookupsFilter() + children = RelatedFilter('common.filters.LocationFilterSet') + level = AllLookupsFilter() + lft = AllLookupsFilter() + name = AllLookupsFilter() + parent = RelatedFilter('common.filters.LocationFilterSet') + rght = AllLookupsFilter() + tree_id = AllLookupsFilter() + type = AllLookupsFilter() + + class Meta: + model = Location diff --git a/common/serializers.py b/common/serializers.py new file mode 100644 index 0000000..0f2e68f --- /dev/null +++ b/common/serializers.py @@ -0,0 +1,20 @@ +from rest_framework.serializers import ModelSerializer + +from .models import Location + + +class LocationSerializer(ModelSerializer): + class Meta: + model = Location + + fields = ( + 'id', + 'name', + 'children', + 'parent', + 'type', + 'lft', + 'rght', + 'level', + 'tree_id', + ) diff --git a/projects/templates/_trash/project_form.html b/projects/templates/_trash/project_form.html index 63d0ed9..30753ef 100644 --- a/projects/templates/_trash/project_form.html +++ b/projects/templates/_trash/project_form.html @@ -245,6 +245,7 @@ function updateSelectData(){ + } $.ajax({ url: '/api/specializations?parent=1', diff --git a/templates/partials/base.html b/templates/partials/base.html index cd3b619..f5bb1e9 100644 --- a/templates/partials/base.html +++ b/templates/partials/base.html @@ -35,5 +35,6 @@ +{% block js_block %} {% endblock %} diff --git a/users/forms.py b/users/forms.py index e8af39c..965bf25 100644 --- a/users/forms.py +++ b/users/forms.py @@ -1,11 +1,18 @@ from django import forms from django.forms import ModelForm +from specializations.models import Specialization from .models import User, ContractorFinancialInfo + class UserEditForm(ModelForm): + def __init__(self, *args, **kwargs): + # import code; code.interact(local=dict(globals(), **locals())) + super().__init__(*args, **kwargs) + self.fields['contractor_specializations'].queryset = kwargs.get('instance').contractor_specializations.all() + class Meta: model = User fields = ( @@ -17,15 +24,15 @@ class UserEditForm(ModelForm): 'website', 'skype', 'avatar', + 'contractor_specializations', ) widgets = { 'date_of_birth': forms.SelectDateWidget(years=range(1940, 2015)), + # 'contractor_specializations': forms.Select(), } - - class ContractorFinancicalInfoForm(ModelForm): def __init__(self, *args, **kwargs): diff --git a/users/mixins.py b/users/mixins.py index 11a3b68..dff6368 100644 --- a/users/mixins.py +++ b/users/mixins.py @@ -1,14 +1,16 @@ from django.http import HttpResponseForbidden +from django.contrib import messages class CheckForUserMixin(object): def dispatch(self, request, *args, **kwargs): - # if request.user.is_authenticated(): - # pk = kwargs.get('pk') - # if pk: - # if request.user.pk != int(pk): - # return HttpResponseForbidden('403 Forbidden') - # else: - # return HttpResponseForbidden('403 Forbidden') + messages.info(request,str(request.user)) + if request.user.is_authenticated(): + pk = kwargs.get('pk') + if pk: + if request.user.pk != int(pk): + return HttpResponseForbidden('403 Forbidden') + else: + return HttpResponseForbidden('403 Forbidden') return super().dispatch(request, *args, **kwargs) diff --git a/users/models.py b/users/models.py index 72b72c6..8af3bf2 100644 --- a/users/models.py +++ b/users/models.py @@ -6,6 +6,7 @@ from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Abstra from specializations.models import Specialization + class UserManager(BaseUserManager): def create_user(self, email, password=None): if not email: @@ -99,6 +100,7 @@ class User(AbstractBaseUser, PermissionsMixin): date_of_birth = models.DateTimeField() avatar = models.ImageField(upload_to='users/avatars/', blank=True) + @property def is_staff(self): return self.is_superuser @@ -133,8 +135,6 @@ class User(AbstractBaseUser, PermissionsMixin): return self.groups.filter(name='Заказчики').exists() - - class Team(models.Model): name = models.CharField(max_length=255) users = models.ManyToManyField(User, related_name ='teams', blank=True) diff --git a/users/templates/contractor_profile_edit.html b/users/templates/contractor_profile_edit.html index 09ceaf9..f2f8786 100644 --- a/users/templates/contractor_profile_edit.html +++ b/users/templates/contractor_profile_edit.html @@ -29,7 +29,13 @@
-

Специализация:

+{#

Специализация: {{ form.location}}

#} +{#

{{ form.contractor_specializations }}

#} + + + {% for spec in form.instance.contractor_specializations.all %} +

{{ spec }}

+ {% endfor %}
- + + + Добавить еще +
-

Местоположение:

+

Местоположение: {{ form.location.value }}

- - + + +
@@ -123,3 +130,74 @@ {% endblock %} +{% block js_block %} + +{% endblock %} +