parent
c2db336f74
commit
8be48ae531
26 changed files with 368 additions and 92 deletions
@ -0,0 +1,9 @@ |
|||||||
|
from django.shortcuts import _get_queryset |
||||||
|
|
||||||
|
def get_or_none(klass, *args, **kwargs): |
||||||
|
queryset = _get_queryset(klass) |
||||||
|
|
||||||
|
try: |
||||||
|
return queryset.get(*args, **kwargs) |
||||||
|
except queryset.model.DoesNotExist: |
||||||
|
return None |
||||||
@ -0,0 +1 @@ |
|||||||
|
default_app_config = 'projects.apps.ProjectsConfig' |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
<ul class="rettList"> |
||||||
|
<li><a href="javascript:void(0)">Рейтинг: <span> {{ ratings }}</span></a></li> |
||||||
|
<li><a href="javascript:void(0)">Безопасные сделки: <span> 0</span></a></li> |
||||||
|
<li> |
||||||
|
<a href="javascript:void(0)"> |
||||||
|
Отзывы: |
||||||
|
<span> + 0</span> |
||||||
|
<small> 0</small> |
||||||
|
<mark> - 0</mark> |
||||||
|
</a> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,10 @@ |
|||||||
|
from django import template |
||||||
|
|
||||||
|
register = template.Library() |
||||||
|
|
||||||
|
@register.inclusion_tag("templatetags/ratings_widget.html", takes_context=True) |
||||||
|
def ratings_widget(context, user_id): |
||||||
|
ratings = user_id |
||||||
|
return { |
||||||
|
'ratings': ratings, |
||||||
|
} |
||||||
@ -0,0 +1 @@ |
|||||||
|
default_app_config = 'specializations.apps.SpecializationConfig' |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
<div class="dashedCol4"> |
||||||
|
<p class="specUser">Специализации:</p> |
||||||
|
{% for spec in specializations %} |
||||||
|
<div class="insetSpec"> |
||||||
|
<span>{{ spec }}</span> |
||||||
|
<span>2-й</span> |
||||||
|
</div> |
||||||
|
{% endfor %} |
||||||
|
</div> |
||||||
@ -0,0 +1,18 @@ |
|||||||
|
from django import template |
||||||
|
from common.utils import get_or_none |
||||||
|
from users.models import User |
||||||
|
|
||||||
|
register = template.Library() |
||||||
|
|
||||||
|
@register.inclusion_tag('templatetags/specializations_widget.html', takes_context=True) |
||||||
|
def specialization_widget(context, user_id): |
||||||
|
user_id = int(user_id) |
||||||
|
user = get_or_none(User, pk=user_id) |
||||||
|
if user: |
||||||
|
specializations = user.contractor_specializations.all() |
||||||
|
else: |
||||||
|
specializations = None |
||||||
|
return { |
||||||
|
'specializations': specializations, |
||||||
|
'user_id': user_id, |
||||||
|
} |
||||||
@ -0,0 +1,176 @@ |
|||||||
|
{% extends 'partials/base.html' %} |
||||||
|
{% load staticfiles %} |
||||||
|
{% block content %} |
||||||
|
{% include 'partials/header.html' %} |
||||||
|
<div class="container mainScore"> |
||||||
|
<div class="row"> |
||||||
|
<form method="post" enctype="multipart/form-data">{% csrf_token %} |
||||||
|
<div class="projectsBlock disTab"> |
||||||
|
<div class="col-lg-12"> |
||||||
|
{{ form.errors }} |
||||||
|
<div class="col-lg-3 divCol3"> |
||||||
|
<div class="avatar"> |
||||||
|
<div class="avatarInset"> |
||||||
|
<img src="/media/{{ form.avatar.value }}" alt="profile-image"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="menuUser upload-img disTab"> |
||||||
|
<div class="upload2 up-l1"> |
||||||
|
<input type="file" name="{{ form.avatar.name }}"> |
||||||
|
<p>Загрузить фотографию</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="col-lg-9 divCol9"> |
||||||
|
<div class="col-lg-4"> |
||||||
|
<p class="name-edit-p">ФИО:</p> |
||||||
|
<input type="text" value="{{ form.first_name.value }}" name="{{ form.first_name.name }}" class="box-sizing inp-edit"> |
||||||
|
<input type="text" value="{{ form.last_name.value }}" name="{{ form.last_name.name }}" class="box-sizing inp-edit"> |
||||||
|
<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">Местоположение: {{ form.location.value }}</p> |
||||||
|
<div class="polsF1 pols-edit disTab"> |
||||||
|
<select id="location-country"> |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="location-region"> |
||||||
|
</select> |
||||||
|
|
||||||
|
<select id="location-city" name="{{ form.location.name }}"> |
||||||
|
</select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="buttonGP btn-edit disTab"> |
||||||
|
<div class="btn-group valProject valProject2" role="group" aria-label="..."> |
||||||
|
<button type="button" class="btn btn-default">Общая информация</button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="col-lg-12 col12 new-filter"> |
||||||
|
<div class="filter clearfix"> |
||||||
|
<div class="titleF1 disTab"> |
||||||
|
<div class="col-lg-7">Дата рождения:</div> |
||||||
|
<div class="col-lg-5">Пол:</div> |
||||||
|
</div> |
||||||
|
<div class="polsF1 disTab"> |
||||||
|
<div class="col-lg-7"> |
||||||
|
{{ form.date_of_birth }} |
||||||
|
</div> |
||||||
|
<div class="col-lg-5 dog-new ed-new"> |
||||||
|
<label><input type="radio" name="{{ form.gender }}"><span></span></label> |
||||||
|
<p>Мужской</p> |
||||||
|
<label class="woman"><input type="radio" name="{{ form.gender }}"><span></span></label> |
||||||
|
<p>Женский</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="titleF1 titleF2 disTab"> |
||||||
|
<div class="col-lg-3">Сайт:</div> |
||||||
|
<div class="col-lg-3">Skype:</div> |
||||||
|
{# <div class="col-lg-3">Электронная почта:</div>#} |
||||||
|
<div class="col-lg-3">Телефон:</div> |
||||||
|
</div> |
||||||
|
<div class="searchF1 polsF1 polsFF polsF3"> |
||||||
|
<div class="col-lg-3"> |
||||||
|
<input type="text" name="{{ form.website.name }}"class="box-sizing surr surr2" placeholder="beeg.com"> |
||||||
|
</div> |
||||||
|
<div class="col-lg-3"> |
||||||
|
<input type="text" name="{{ form.skype.name }}" class="box-sizing surr surr2" placeholder="nokia770"> |
||||||
|
</div> |
||||||
|
{# <div class="col-lg-3">#} |
||||||
|
{# <input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="example@gmail.com">#} |
||||||
|
{# </div>#} |
||||||
|
<div class="col-lg-3"> |
||||||
|
<input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="+7 999 999 44 02"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="col-lg-12"> |
||||||
|
<div class="col-lg-12 make-new make-eed"> |
||||||
|
<label>{{ form.cro }}<span></span></label> |
||||||
|
<p>Есть допуск СРО</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="searchF1 polsF1 polsFF links-filter"> |
||||||
|
<input class="btn-submit-link" type="submit" value="Сохранить" /> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</form> |
||||||
|
{% include 'partials/footer.html' %} |
||||||
|
</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 %} |
||||||
|
|
||||||
|
|
||||||
@ -1,3 +1,4 @@ |
|||||||
from django.contrib import admin |
from django.contrib import admin |
||||||
|
from .models import WorkSell |
||||||
|
|
||||||
# Register your models here. |
admin.site.register(WorkSell) |
||||||
|
|||||||
@ -0,0 +1,28 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.6 on 2016-06-21 09:59 |
||||||
|
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): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||||
|
('work_sell', '0002_auto_20160607_1755'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AlterModelOptions( |
||||||
|
name='worksell', |
||||||
|
options={'verbose_name': 'Готовая работа', 'verbose_name_plural': 'Готовые работы'}, |
||||||
|
), |
||||||
|
migrations.AddField( |
||||||
|
model_name='worksell', |
||||||
|
name='contractor', |
||||||
|
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='work_sell', to=settings.AUTH_USER_MODEL), |
||||||
|
preserve_default=False, |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Generated by Django 1.9.6 on 2016-06-21 10:19 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import migrations, models |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('work_sell', '0003_auto_20160621_1259'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AddField( |
||||||
|
model_name='worksell', |
||||||
|
name='price', |
||||||
|
field=models.DecimalField(decimal_places=0, default=0, max_digits=10), |
||||||
|
), |
||||||
|
] |
||||||
@ -1,9 +1,16 @@ |
|||||||
from django.db import models |
from django.db import models |
||||||
|
from users.models import User |
||||||
|
|
||||||
class WorkSell(models.Model): |
class WorkSell(models.Model): |
||||||
name = models.CharField(max_length=255) |
name = models.CharField(max_length=255) |
||||||
description = models.TextField(blank=True) |
description = models.TextField(blank=True) |
||||||
img = models.ImageField(upload_to='worksell/worksell') |
img = models.ImageField(upload_to='worksell/worksell') |
||||||
|
price = models.DecimalField(max_digits=10, decimal_places=0, default=0) |
||||||
|
contractor = models.ForeignKey(User, related_name='work_sell') |
||||||
|
|
||||||
def __str__(self): |
def __str__(self): |
||||||
return self.name |
return self.name |
||||||
|
|
||||||
|
class Meta: |
||||||
|
verbose_name = 'Готовая работа' |
||||||
|
verbose_name_plural = 'Готовые работы' |
||||||
|
|||||||
Loading…
Reference in new issue