#ARC-11 add common api

remotes/origin/setup
Mukhtar 10 years ago
parent af12f80a26
commit c2db336f74
  1. 3
      api/urls.py
  2. 10
      api/views.py
  3. 17
      common/filters.py
  4. 20
      common/serializers.py
  5. 1
      projects/templates/_trash/project_form.html
  6. 1
      templates/partials/base.html
  7. 11
      users/forms.py
  8. 16
      users/mixins.py
  9. 4
      users/models.py
  10. 100
      users/templates/contractor_profile_edit.html

@ -1,6 +1,6 @@
from rest_framework import routers from rest_framework import routers
from .views import ProjectViewSet, SpecializationViewSet, UserViewSet from .views import ProjectViewSet, SpecializationViewSet, UserViewSet, LocationViewSet
router = routers.DefaultRouter() router = routers.DefaultRouter()
@ -8,5 +8,6 @@ router = routers.DefaultRouter()
router.register(r'projects', ProjectViewSet) router.register(r'projects', ProjectViewSet)
router.register(r'specializations', SpecializationViewSet) router.register(r'specializations', SpecializationViewSet)
router.register(r'users', UserViewSet) router.register(r'users', UserViewSet)
router.register(r'location', LocationViewSet)
urlpatterns = router.urls urlpatterns = router.urls

@ -12,6 +12,9 @@ from users.models import User
from users.serializers import UserSerializer from users.serializers import UserSerializer
from users.filters import UserFilterSet from users.filters import UserFilterSet
from common.models import Location
from common.serializers import LocationSerializer
from common.filters import LocationFilterSet
class ProjectViewSet(ModelViewSet): class ProjectViewSet(ModelViewSet):
queryset = Project.objects.all() queryset = Project.objects.all()
@ -29,3 +32,10 @@ class UserViewSet(ModelViewSet):
queryset = User.objects.all() queryset = User.objects.all()
serializer_class = UserSerializer serializer_class = UserSerializer
filter_class = UserFilterSet filter_class = UserFilterSet
class LocationViewSet(ModelViewSet):
queryset = Location.objects.all()
serializer_class = LocationSerializer
filter_class = LocationFilterSet

@ -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

@ -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',
)

@ -245,6 +245,7 @@
function updateSelectData(){ function updateSelectData(){
} }
$.ajax({ $.ajax({
url: '/api/specializations?parent=1', url: '/api/specializations?parent=1',

@ -35,5 +35,6 @@
<script src='{% static "lib/bootstrap-select/js/bootstrap-select.js" %}'></script> <script src='{% static "lib/bootstrap-select/js/bootstrap-select.js" %}'></script>
<script src='{% static "js/main.js" %}'></script> <script src='{% static "js/main.js" %}'></script>
{% block js_block %} {% endblock %}
</body> </body>
</html> </html>

@ -1,11 +1,18 @@
from django import forms from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from specializations.models import Specialization
from .models import User, ContractorFinancialInfo from .models import User, ContractorFinancialInfo
class UserEditForm(ModelForm): 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: class Meta:
model = User model = User
fields = ( fields = (
@ -17,15 +24,15 @@ class UserEditForm(ModelForm):
'website', 'website',
'skype', 'skype',
'avatar', 'avatar',
'contractor_specializations',
) )
widgets = { widgets = {
'date_of_birth': forms.SelectDateWidget(years=range(1940, 2015)), 'date_of_birth': forms.SelectDateWidget(years=range(1940, 2015)),
# 'contractor_specializations': forms.Select(),
} }
class ContractorFinancicalInfoForm(ModelForm): class ContractorFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

@ -1,14 +1,16 @@
from django.http import HttpResponseForbidden from django.http import HttpResponseForbidden
from django.contrib import messages
class CheckForUserMixin(object): class CheckForUserMixin(object):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
# if request.user.is_authenticated(): messages.info(request,str(request.user))
# pk = kwargs.get('pk') if request.user.is_authenticated():
# if pk: pk = kwargs.get('pk')
# if request.user.pk != int(pk): if pk:
# return HttpResponseForbidden('403 Forbidden') if request.user.pk != int(pk):
# else: return HttpResponseForbidden('403 Forbidden')
# return HttpResponseForbidden('403 Forbidden') else:
return HttpResponseForbidden('403 Forbidden')
return super().dispatch(request, *args, **kwargs) return super().dispatch(request, *args, **kwargs)

@ -6,6 +6,7 @@ from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Abstra
from specializations.models import Specialization from specializations.models import Specialization
class UserManager(BaseUserManager): class UserManager(BaseUserManager):
def create_user(self, email, password=None): def create_user(self, email, password=None):
if not email: if not email:
@ -99,6 +100,7 @@ class User(AbstractBaseUser, PermissionsMixin):
date_of_birth = models.DateTimeField() date_of_birth = models.DateTimeField()
avatar = models.ImageField(upload_to='users/avatars/', blank=True) avatar = models.ImageField(upload_to='users/avatars/', blank=True)
@property @property
def is_staff(self): def is_staff(self):
return self.is_superuser return self.is_superuser
@ -133,8 +135,6 @@ class User(AbstractBaseUser, PermissionsMixin):
return self.groups.filter(name='Заказчики').exists() return self.groups.filter(name='Заказчики').exists()
class Team(models.Model): class Team(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
users = models.ManyToManyField(User, related_name ='teams', blank=True) users = models.ManyToManyField(User, related_name ='teams', blank=True)

@ -29,7 +29,13 @@
<input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit"> <input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit">
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
<p class="name-edit-p">Специализация:</p> {# <p class="name-edit-p">Специализация: {{ form.location}}</p>#}
{# <p class="name-edit-p">{{ form.contractor_specializations }}</p>#}
{% for spec in form.instance.contractor_specializations.all %}
<h4>{{ spec }}</h4>
{% endfor %}
<div class="polsF1 pols-edit disTab"> <div class="polsF1 pols-edit disTab">
<select class="selectpicker4"> <select class="selectpicker4">
<option>Mustard</option> <option>Mustard</option>
@ -41,23 +47,24 @@
<option>Ketchup</option> <option>Ketchup</option>
<option>Relish</option> <option>Relish</option>
</select> </select>
<a href="javascript:void(0)" class="add-edit">
<a href="javascript:void(0)" class="add-edit" id="add-edit-spec">
Добавить еще Добавить еще
</a> </a>
</div> </div>
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
<p class="name-edit-p">Местоположение:</p> <p class="name-edit-p">Местоположение: {{ form.location.value }}</p>
<div class="polsF1 pols-edit disTab"> <div class="polsF1 pols-edit disTab">
<select class="selectpicker4"> <select id="location-country">
<option>Страна</option>
<option>Ketchup</option>
<option>Relish</option>
</select> </select>
<select class="selectpicker4">
<option>Город</option> <select id="location-region">
<option>Ketchup</option> </select>
<option>Relish</option>
<select id="location-city">
</select> </select>
</div> </div>
</div> </div>
@ -123,3 +130,74 @@
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
{% block js_block %}
<script type="text/javascript">
$(function(){
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$("#add-edit-spec").on('click',function(){
$("<select class='selectpicker4'><option >Видное</option></select>").insertBefore("#add-edit-spec");
$('.selectpicker4').selectpicker({
style: 'btn-info',
size: 4,
width: '237px'
});
});
var csrftoken = getCookie('csrftoken');
$.ajax({
url: '/api/location',
type: 'GET',
data:{ csrfmiddlewaretoken : csrftoken},
dataType:'json',
'success': function(json){
console.log(json.results);
var out = ''
var outCountry = '';
$.each(json.results, function(i,v){
if (v.type == 'country'){
outCountry += '<option value="' + v.id + '">' + v.name + '</option>';
}
if (v.type == 'town') {
out += '<option value="' + v.id + '">' + v.name + '</option>';
}
});
$('#location-country').html(outCountry);
$('#location-city').html(out);
$('#location-country').addClass("selectpicker4");
$('#location-city').addClass("selectpicker4");
$('.selectpicker4').selectpicker({
style: 'btn-info',
size: 4,
width: '237px'
});
}
});
});
</script>
{% endblock %}

Loading…
Cancel
Save