remotes/origin/setup
ArturBaybulatov 10 years ago
commit 83ae308d97
  1. 6
      projects/forms.py
  2. 56
      projects/migrations/0039_auto_20160707_1724.py
  3. 14
      projects/models.py
  4. 97
      projects/templates/contractor_portfolio_edit.html
  5. 6
      projects/urls.py
  6. 31
      projects/views.py
  7. 24
      users/templates/contractor_profile.html
  8. 41
      users/templates/portfolio_create_form.html
  9. 8
      users/templates/worksell_create_form.html
  10. 3
      users/views.py
  11. 12
      work_sell/filters.py
  12. 3
      work_sell/forms.py
  13. 10
      work_sell/templates/worksell_delete.html
  14. 106
      work_sell/templates/worksell_detail.html
  15. 13
      work_sell/templates/worksell_edit.html
  16. 36
      work_sell/templates/worksells_list.html
  17. 4
      work_sell/urls.py
  18. 25
      work_sell/views.py

@ -92,6 +92,12 @@ class PortfolioForm(forms.ModelForm):
model = Portfolio
fields = '__all__'
widgets = {
'construction_type': forms.Select(attrs={'class':'selectpicker'}),
'building_classification': forms.Select(attrs={'class':'selectpicker'}),
'currency': forms.Select(attrs={'class':'selectpicker'}),
'term_type': forms.Select(attrs={'class':'selectpicker'}),
}
class ContractorProjectAnswerForm(forms.ModelForm):
# def __init__(self, *args, **kwargs):

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-07 14:24
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('projects', '0038_auto_20160706_1249'),
]
operations = [
migrations.RemoveField(
model_name='portfolio',
name='budget_by_agreement',
),
migrations.AddField(
model_name='portfolio',
name='currency',
field=models.CharField(blank=True, choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=20, null=True),
),
migrations.AlterField(
model_name='portfolio',
name='budget',
field=models.DecimalField(blank=True, decimal_places=0, default=0, max_digits=10, null=True),
),
migrations.AlterField(
model_name='portfolio',
name='building_classification',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.BuildingClassfication'),
),
migrations.AlterField(
model_name='portfolio',
name='construction_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.ConstructionType'),
),
migrations.AlterField(
model_name='portfolio',
name='specialization',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='specializations.Specialization'),
),
migrations.AlterField(
model_name='portfolio',
name='term',
field=models.IntegerField(blank=True, default=0, null=True),
),
migrations.AlterField(
model_name='portfolio',
name='term_type',
field=models.CharField(blank=True, choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20, null=True),
),
]

@ -180,13 +180,13 @@ class Candidate(models.Model):
class Portfolio(models.Model):
description = models.TextField()
name = models.CharField(max_length=255)
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True)
budget_by_agreement = models.BooleanField(default=False)
specialization = TreeForeignKey(Specialization, related_name='portfolios')
term = models.IntegerField(default=0)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour')
building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios')
construction_type = models.ForeignKey(ConstructionType, related_name='portfolios')
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
specialization = TreeForeignKey(Specialization, related_name='portfolios',null=True, blank=True)
term = models.IntegerField(default=0,null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour',null=True, blank=True)
building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios',null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='portfolios',null=True, blank=True)
location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True)
worksell = models.BooleanField(default=False)
user = models.ForeignKey(User, related_name='portfolios')

@ -0,0 +1,97 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<p class="titleScore">Изменение портфолио</p>
</div>
<form method="post" enctype="multipart/form-data" id="worksell-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название <span style="color: red">{{ form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.name.html_name }}" value="{{ form.name.value }}">
<input type="hidden" name="{{ form.contractor.html_name }}" value="{{ form.contractor.value }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Описание<span style="color: red">{{ form.description.errors.as_text }}</span></p>
<textarea name="{{ form.description.html_name }}" id="text-new">{{ form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ form.specialization.html_name }}"
value="{{ form.specialization.value }}">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ form.currency}}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}">
</div>
<div class="col-lg-4">
{{ form.term_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
</div>
<div class="polsF1 polsF2 disTab">
<p>Вид строительства</p>
{{ form.construction_type}}
</div>
<div class="polsF1 polsF2 disTab">
<p>Классификация здания</p>
{{ form.building_classification}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить проект">
</div>
</form>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -13,6 +13,8 @@ from .views import (
ProjectComparisonView,
ProjectsView,
ProjectView,
contractor_portfolio_create,
ContractorPortfolioUpdateView,
)
app_name = 'projects'
@ -23,11 +25,13 @@ urlpatterns = [
urls.url(r'^create/$', CustomerProjectCreateView.as_view(), name='customer-project-create'),
urls.url(r'^(?P<pk>\d+)/$', ProjectView.as_view(), name='detail'),
urls.url(r'^(?P<pk>\d+)/edit/$', CustomerProjectEditView.as_view(), name='customer-project-edit'),
urls.url(r'^(?P<pk>\d+)/trash/$', CustomerProjectTrashView.as_view(), name='customer-project-trash'),
urls.url(r'^(?P<pk>\d+)/restore/$', CustomerProjectRestoreView.as_view(), name='customer-project-restore'),
urls.url(r'^(?P<pk>\d+)/delete/$', CustomerProjectDeleteView.as_view(), name='customer-project-delete'),
urls.url(r'^(?P<pk>\d+)/answer/$', ContractorProjectAnswerView.as_view(), name='contractor-project-answer'),
urls.url(r'^portfolio/create/$', contractor_portfolio_create, name='contractor-portfolio-create'),
urls.url(r'^portfolio/(?P<pk>\d+)/edit/$', ContractorPortfolioUpdateView.as_view(), name='contractor-portfolio-edit'),
urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'),
urls.url(r'^candidate/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'),
# urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),

@ -1,12 +1,14 @@
import json
from pprint import pprint, pformat
import pydash as _
from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse
from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse, Http404
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, DetailView, CreateView, View, TemplateView, FormView
from django.views.generic import ListView, DetailView, CreateView, View, UpdateView, TemplateView, FormView
from django.views.generic.base import ContextMixin
from pprint import pprint, pformat
import pydash as _
from .mixins import LastAccessMixin
from .models import Project, ProjectFile, Portfolio, Candidate, Answer, Realty, Order
@ -312,4 +314,25 @@ class OfferOrderView(View):
return render(request, self.template_name)
def contractor_portfolio_create(request):
if request.is_ajax():
form = PortfolioForm(data=request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
data = {'status': 'ok'}
else:
data = {'status': 'no', 'form_errors': form.errors}
return HttpResponse(json.dumps(data), content_type='application/json')
else:
raise Http404
class ContractorPortfolioUpdateView(UpdateView):
model = Portfolio
form_class = PortfolioForm
template_name = 'contractor_portfolio_edit.html'
def get_success_url(self):
return reverse('proje')
# import code; code.interact(local=dict(globals(), **locals()))

@ -123,7 +123,7 @@
<div class="galleryWork2 disTab">
{% for p in user.portfolio.all %}
{% for p in user.portfolios.all %}
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal"
@ -134,9 +134,11 @@
<div class="insetCol2 box-sizing disTab">
<p>{{ p.name }}</p>
<div class="buttonsImg" disTab>
<a href="{% url 'projects:contractor-portfolio-edit' p.pk %}">
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
</a>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
@ -431,13 +433,25 @@
});
$('#portfolio-add-form').on('submit', function(e){
$('#portfolio-add-form').on('submit', function(e) {
e.preventDefault();
var dataSerializer = $(this).serialize();
alert(dataSerializer);
});
$.ajax({
url: '/projects/portfolio/create/',
method: 'POST',
data: dataSerializer,
dataType: 'json',
success: function (data) {
if (data.status == 'ok') {
location.reload();
}
},
error: function (jqXHR, exception) {
console.log(jqXHR.statusCode);
}
});
});
});
</script>
{% endblock %}

@ -3,14 +3,14 @@
<form method="post" id="portfolio-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ worksell_form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ worksell_form.name.html_name }}"
value="{{ worksell_form.name.value }}">
<p>Название<span style="color: red">{{ portfolio_form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ portfolio_form.name.html_name }}"
value="{{ portfolio_form.name.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ worksell_form.description.errors.as_text }}</span></p>
<textarea name="{{ worksell_form.description.html_name }}" id="text-new">{{ worksell_form.description.value }}</textarea>
<p>Описание<span style="color: red">{{ portfolio_form.description.errors.as_text }}</span></p>
<textarea name="{{ portfolio_form.description.html_name }}" id="text-new">{{ portfolio_form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
@ -33,46 +33,55 @@
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ worksell_form.specialization.html_name }}"
value="{{ worksell_form.specialization.value }}">
<input type="hidden" id="chosenSpecId" name="{{ portfolio_form.specialization.html_name }}"
value="{{ portfolio_form.specialization.value }}">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ worksell_form.budget.errors.as_text }}</p>
<p>Бюджет{{ portfolio_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.budget_type }}
{{ portfolio_form.currency}}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ worksell_form.budget.errors.as_text }}</p>
<p>Срок выполнения{{ portfolio_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.term_type }}
{{ portfolio_form.term_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab"></div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="polsF1 polsF2 disTab">
<p>Вид строительства</p>
{{ worksell_form.construction_type}}
{{ portfolio_form.construction_type}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="polsF1 polsF2 disTab">
<p>Классификация здания</p>
{{ worksell_form.building_classification}}
{{ portfolio_form.building_classification}}
</div>
<div class="polsF1 polsF2 disTab">
<input type="text" name="{{ portfolio_form.user.html_name }}" value="{{ request.user.pk }}" />
</div>
<div class="polsF1 polsF2 disTab">
<input type="file" name="{{ portfolio_form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить проект">
<input class="btn-submit-link" type="submit" value="Разместить портфолио">
</div>
</form>

@ -61,21 +61,21 @@
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="polsF1 polsF2 disTab">
<p>Вид строительства</p>
{{ worksell_form.construction_type}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="polsF1 polsF2 disTab">
<p>Классификация здания</p>
{{ worksell_form.building_classification}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="polsF1 polsF2 disTab">
<input type="text" name="{{ worksell_form.contractor.html_name }}" value="{{ request.user.pk }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="polsF1 polsF2 disTab">
<input type="file" name="{{ worksell_form.img.html_name }}" >
</div>

@ -9,6 +9,7 @@ from archilance.mixins import BaseMixin
from common.utils import get_or_none
from specializations.models import Specialization
from work_sell.forms import WorkSellForm
from projects.forms import PortfolioForm
from .models import User, ContractorFinancialInfo
from .mixins import CheckForUserMixin
from .forms import UserEditForm, ContractorFinancicalInfoForm
@ -30,12 +31,14 @@ class ContractorListView(ListView):
class ContractorProfileDetailView(DetailView):
model = User
worksell_form_class = WorkSellForm
portfolio_form_class = PortfolioForm
template_name = 'contractor_profile.html'
context_object_name = 'contractor'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['worksell_form'] = self.worksell_form_class
context['portfolio_form'] = self.portfolio_form_class
return context

@ -0,0 +1,12 @@
import django_filters
from work_sell.models import WorkSell
class WorkSellFilter(django_filters.FilterSet):
budget = django_filters.NumberFilter()
budget__gt = django_filters.NumberFilter(name='budget', lookup_expr='gt')
budget__lt = django_filters.NumberFilter(name='budget', lookup_expr='lt')
class Meta:
model = WorkSell

@ -13,10 +13,11 @@ class WorkSellForm(forms.ModelForm):
widgets = {
'construction_type': forms.Select(attrs={'class':'selectpicker'}),
'building_classification': forms.Select(attrs={'class':'selectpicker'}),
'currency': forms.Select(attrs={'class':'selectpicker'}),
'term_type': forms.Select(attrs={'class':'selectpicker'}),
}
def __init__(self, *args, **kwargs):
# self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()

@ -0,0 +1,10 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %}
<form action="" method="post">{% csrf_token %}
<p>Вы дейтсвительно хотите удалить? "{{ object }}"?</p>
<input type="submit" value="Удалить" />
</form>
{% endblock %}

@ -2,87 +2,7 @@
{% load staticfiles %}
{% load thumbnail %}
{% block content %}
<body>
<div class="wrTop disTab">
<div class="container-fluid topMain">
<div class="row">
<div class="col-lg-3">
<div class="logo" onClick="window.location='/'"></div>
</div>
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="javascript:void(0)">Биржа проектов</a>
<span></span>
</li>
<li class="icon_tm2">
<a href="javascript:void(0)">Поиск исполнителей</a>
<span></span>
</li>
<li class="icon_tm3">
<a href="javascript:void(0)">Работы на продажу</a>
<span></span>
</li>
</ul>
</div>
<div class="col-lg-2">
<div class="imgProfile">
<img src="img/profile.jpg" alt="profile-image">
</div>
<div class="infoProfile disTab">
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span>
</button>
<ul class="dropdown-menu menu-drop-new">
<li class="icon_mm1">
<a href="#">
Войти заказчиком
<span></span>
</a>
</li>
<li class="icon_mm2">
<a href="#">
Войти исполнителем
<span></span>
</a>
</li>
<li class="icon_mm3">
<a href="#">
Сообщения
<span></span>
</a>
</li>
<li class="icon_mm4">
<a href="#">
Счет
<span></span>
</a>
</li>
<li class="icon_mm5">
<a href="#">
Настройки
<span></span>
</a>
</li>
<li class="icon_mm6">
<a href="#">
FAQ
<span></span>
</a>
</li>
</ul>
</div>
</div>
<div class="rating">
<div class="ratingInset"></div>
<div class="iconRating"></div>
</div>
<p class="ratingPer">45%</p>
</div>
</div>
</div>
</div>
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
@ -97,24 +17,40 @@
<div class="btnReadyBlock disTab">
<div class="triangle1"></div>
<div class="col-lg-3">
<p class="cenaReady">{{ object.price }} <i class="fa fa-rub"></i></p>
<p class="cenaReady">{{ object.budget }} <i class="fa fa-rub"></i></p>
</div>
<div class="col-lg-3">
<a href="javascript:void(0)" class="linkReady LR1">
<a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR1">
купить
</a>
</div>
<div class="col-lg-3">
<a href="javascript:void(0)" class="linkReady LR2">
<a href="{% url 'chat:chat-user' %}" class="linkReady LR2">
Написать сообщение
</a>
</div>
<div class="col-lg-3">
<a href="javascript:void(0)" class="linkReady LR3">
<a href="#" data-toggle="modal" data-target="#contact-contactor-modal" class="linkReady LR3">
посмотреть контакты
</a>
</div>
</div>
<div id="contact-contactor-modal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
</button>
<h4 class="modal-title">Контакты владельца </h4>
</div>
<div class="modal-body">
<h2>Здесь находятся контакты владельца</h2>
</div>
</div>
</div>
</div>
<div class="desReadyBlock">
<div class="col-lg-10 col-lg-offset-1">
<p class="titleReady">Описание:</p>

@ -11,11 +11,11 @@
<p class="titleScore">Изменение готового проекта</p>
</div>
<form method="post" id="worksell-add-form">{% csrf_token %}
<form method="post" enctype="multipart/form-data" id="worksell-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.name.html_name }}"
value="{{ form.name.value }}">
<input type="text" class="box-sizing" name="{{ form.name.html_name }}" value="{{ form.name.value }}">
<input type="hidden" name="{{ form.contractor.html_name }}" value="{{ form.contractor.value }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
@ -63,7 +63,7 @@
<p>Срок выполнения{{ form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
<input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}">
</div>
<div class="col-lg-4">
{{ form.term_type }}
@ -83,14 +83,9 @@
{{ form.building_classification}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="text" name="{{ form.contractor.html_name }}" value="{{ form.contractor.value }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить проект">
</div>

@ -9,6 +9,7 @@
<div class="col-lg-12">
<p class="titleScore">Работы на продажу</p>
</div>
<form>
<div class="col-lg-12">
<div class="filter clearfix">
<div class="triangle1"></div>
@ -35,12 +36,12 @@
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Тип работ:</div>
<div class="col-lg-8">Специализации:</div>
<div class="col-lg-8"></div>
</div>
<div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" placeholder="От" class="box-sizing otInp">
<input type="text" placeholder="До" class="box-sizing otInp">
<input type="text" placeholder="От" name="from_budget" class="box-sizing otInp">
<input type="text" placeholder="До" name="to_budget" class="box-sizing otInp">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
@ -48,15 +49,9 @@
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<a href="javascript:void(0)" class="findReal">
найти исполнителя
</a>
<button type="submit" class="findReal">Поиск</button>
</div>
<div class="col-lg-2">
<a href="javascript:void(0)" class="clearSearch">
@ -77,20 +72,24 @@
</div>
<div class="slideRes disTab activeSlide">
<div class="titleF1 disTab">
<div class="col-lg-3">Тип работ:</div>
<div class="col-lg-3">Специализации:</div>
<div class="col-lg-3">Классификация</div>
<div class="col-lg-3">Вид строительства:</div>
<div class="col-lg-3">Местоположение:</div>
<div class="col-lg-3"></div>
<div class="col-lg-3">Специализации:</div>
</div>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<select class="selectpicker" name="building_classification">
{% for bc in building_classifications %}
<option>{{ bc }}</option>
{% endfor %}
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
{% for ct in construction_types %}
<option>{{ ct }}</option>
{% endfor %}
</select>
</div>
<div class="col-lg-3">
@ -107,6 +106,7 @@
</div>
</div>
</div>
</form>
<div class="galleryWork disTab">
{% for work in object_list %}
<div class="col-lg-3">
@ -120,7 +120,7 @@
</a>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ work.price }} <i class="fa fa-rub"></i>
{{ work.budget }} <i class="fa fa-rub"></i>
</div>
</div>
</div>
@ -133,9 +133,11 @@
<i class="fa fa-pencil"></i>
</div>
</a>
<a href="{% url 'work_sell:delete' work.pk %}">
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</a>
</div>
</div>
</div>

@ -5,6 +5,7 @@ from .views import (
WorkSellDetail,
WorkSellCreateView,
WorkSellUpdateView,
WorkSellDeleteView,
work_sell_create,
)
@ -13,7 +14,8 @@ app_name = 'work_sell'
urlpatterns = [
urls.url(r'^$', WorkSellsView.as_view(), name='list'),
urls.url(r'^create/$', WorkSellCreateView.as_view(), name='create'),
urls.url(r'^(?P<pk>\d+)/edit/$', WorkSellUpdateView.as_view(), name='edit'),
urls.url(r'^(?P<pk>\d+)/edit/$',WorkSellUpdateView.as_view(), name='edit'),
urls.url(r'^(?P<pk>\d+)/delete/$',WorkSellDeleteView.as_view(), name='delete'),
urls.url(r'^test/$', work_sell_create, name='test'),
urls.url(r'^(?P<pk>\d+)/$', WorkSellDetail.as_view(), name='detail'),
]

@ -4,15 +4,31 @@ from django.core.urlresolvers import reverse
from django.http import JsonResponse, HttpResponse
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView, TemplateView
from projects.models import BuildingClassfication, ConstructionType
from .models import WorkSell
from .forms import WorkSellForm
class WorkSellsView(ListView):
model = WorkSell
template_name = 'worksells_list.html'
paginate_by = 20
def get_form_kwargs(self, **kwargs):
kwargs = super().get_form_kwargs
def get_queryset(self, **kwargs):
qs = WorkSell.objects.all()
# if self.request.GET:
# budget_from = self.request.GET
# pass
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['building_classifications'] = BuildingClassfication.objects.all()
context['construction_types'] = ConstructionType.objects.all()
return context
class WorkSellDetail(DetailView):
model = WorkSell
@ -34,7 +50,6 @@ def work_sell_create(request):
else:
data = {'status': 'no', 'form_errors': form.errors}
return HttpResponse(json.dumps(data), content_type='application/json')
return HttpResponse("HEllo")
class WorkSellCreateView(CreateView):
@ -52,8 +67,12 @@ class WorkSellUpdateView(UpdateView):
return reverse('work_sell:list')
class WorkSellDeleteView(CreateView):
class WorkSellDeleteView(DeleteView):
model = WorkSell
template_name = 'worksell_delete.html'
def get_success_url(self):
return reverse('work_sell:list')
class JSONResponseMixin(object):

Loading…
Cancel
Save