#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 .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

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

@ -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(){
}
$.ajax({
url: '/api/specializations?parent=1',

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

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

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

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

@ -29,7 +29,13 @@
<input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit">
</div>
<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">
<select class="selectpicker4">
<option>Mustard</option>
@ -41,23 +47,24 @@
<option>Ketchup</option>
<option>Relish</option>
</select>
<a href="javascript:void(0)" class="add-edit">
<a href="javascript:void(0)" class="add-edit" id="add-edit-spec">
Добавить еще
</a>
</div>
</div>
<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">
<select class="selectpicker4">
<option>Страна</option>
<option>Ketchup</option>
<option>Relish</option>
<select id="location-country">
</select>
<select class="selectpicker4">
<option>Город</option>
<option>Ketchup</option>
<option>Relish</option>
<select id="location-region">
</select>
<select id="location-city">
</select>
</div>
</div>
@ -123,3 +130,74 @@
</div>
</div>
{% 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