remotes/origin/PR-39
Mukhtar 9 years ago
commit bf12698a88
  1. 46
      projects/migrations/0034_auto_20160916_1933.py
  2. 20
      projects/migrations/0035_auto_20160916_2003.py
  3. 15
      projects/models.py
  4. 4
      projects/templates/comparison.html
  5. 11
      projects/templates/customer_project_create.html
  6. 46
      projects/templates/project_detail.html
  7. 89
      users/templates/contractor_profile.html
  8. 12
      users/templates/customer_profile_open_projects.html
  9. 16
      users/templates/partials/customer_profile_info_block.html
  10. 1
      users/views.py
  11. 4
      wallets/forms.py
  12. 27
      wallets/migrations/0016_auto_20160916_1933.py
  13. 8
      wallets/models.py
  14. 11
      wallets/templates/score-detail.html
  15. 1
      work_sell/forms.py
  16. 16
      work_sell/templates/worksell_edit.html

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 16:33
from __future__ import unicode_literals
from django.db import migrations, models
import projects.validators
class Migration(migrations.Migration):
dependencies = [
('projects', '0033_auto_20160916_1534'),
]
operations = [
migrations.AlterField(
model_name='projectworktypesuggestion',
name='commentary',
field=models.TextField(blank=True, verbose_name='Комментарий'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='email',
field=models.EmailField(max_length=254, verbose_name='Email'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='name',
field=models.CharField(max_length=255, verbose_name='Название'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='processed',
field=models.BooleanField(default=False, verbose_name='Рассмотрено?'),
),
migrations.AlterField(
model_name='projectworktypesuggestion',
name='username',
field=models.CharField(blank=True, max_length=255, verbose_name='Имя пользователя'),
),
migrations.AlterField(
model_name='stage',
name='term',
field=models.DateField(validators=[projects.validators.validate_term]),
),
]

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 17:03
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('projects', '0034_auto_20160916_1933'),
]
operations = [
migrations.AlterField(
model_name='stage',
name='term',
field=models.DateField(),
),
]

@ -163,6 +163,11 @@ class Answer(models.Model):
class AnswerMessage(models.Model): class AnswerMessage(models.Model):
# Get a message's author:
#
# customer: `message.is_sender_customer and message.answer.project.customer`
# contractor/team: `not message2.is_sender_customer and message2.contractor_or_team`
answer = models.ForeignKey(Answer, related_name='messages') answer = models.ForeignKey(Answer, related_name='messages')
created = models.DateTimeField(default=timezone.now) created = models.DateTimeField(default=timezone.now)
is_sender_customer = models.BooleanField(default=False) is_sender_customer = models.BooleanField(default=False)
@ -362,11 +367,11 @@ class PortfolioPhoto(models.Model):
class ProjectWorkTypeSuggestion(models.Model): class ProjectWorkTypeSuggestion(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255, verbose_name='Название')
commentary = models.TextField(blank=True) commentary = models.TextField(blank=True, verbose_name='Комментарий')
processed = models.BooleanField(default=False) processed = models.BooleanField(default=False, verbose_name='Рассмотрено?')
username = models.CharField(max_length=255) username = models.CharField(max_length=255, blank=True, verbose_name='Имя пользователя')
email = models.EmailField() email = models.EmailField(verbose_name='Email')
class Meta: class Meta:
verbose_name = 'Предложение типов работ (проектов)' verbose_name = 'Предложение типов работ (проектов)'

@ -36,9 +36,9 @@
<td> <td>
{% if cand.answer.author|class_name == 'User' %} {% if cand.answer.author|class_name == 'User' %}
{{ cand.answer.author.get_full_name }} {% firstof cand.answer.author.get_full_name.strip cand.answer.author.username %}
{% elif cand.answer.author|class_name == 'Team' %} {% elif cand.answer.author|class_name == 'Team' %}
{{ cand.answer.author.name }} {% firstof cand.answer.author.name.strip cand.answer.author.username %}
{% endif %} {% endif %}
</td> </td>

@ -304,22 +304,19 @@
;(function() { ;(function() {
var $workTypeSuggestionModal = $('#projectWorkTypeSuggestionModal') var $modal = $('#projectWorkTypeSuggestionModal')
var $form = $workTypeSuggestionModal.find('.-project-work-type-suggestion-form').first() var $form = $modal.find('.-project-work-type-suggestion-form').first()
var workTypeSuggestionUrl = '/projects/suggest-work-type/' var workTypeSuggestionUrl = '/projects/suggest-work-type/'
$workTypeSuggestionModal.find('.-action-button').first().on('click', function($evt) { $modal.find('.-action-button').first().on('click', function($evt) {
$.post(workTypeSuggestionUrl, $form.serialize()) $.post(workTypeSuggestionUrl, $form.serialize())
.then(function(res) { .then(function(res) {
if (res.status === 'success') { if (res.status === 'success') {
console.log('Success')
$form.trigger('reset') $form.trigger('reset')
$('.-error').text('') $('.-error').text('')
$workTypeSuggestionModal.modal('hide') $modal.modal('hide')
$.jGrowl('Предложение успешно отправлено') $.jGrowl('Предложение успешно отправлено')
} else if (res.status === 'error') { } else if (res.status === 'error') {
console.log('Error')
_.flow( _.flow(
_.toPairs, _.toPairs,

@ -5,6 +5,16 @@
{% load specializtions_tags %} {% load specializtions_tags %}
{% load project_tags %} {% load project_tags %}
{% block head_css %}
<style>
.-highlighted-message {
background-color: #E9FFF8;
}
</style>
{% endblock %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
@ -332,17 +342,17 @@
<div class="commBlock44 disTab"> <div class="commBlock44 disTab">
{% for message in answer.messages.all %} {% for message in answer.messages.all %}
<div class="comm44 disTab"> <div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1 {% if not message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %} {% if message.is_sender_customer %}
<p class="nameComm nameCommAct"> <p class="nameComm">
{{ project.customer.get_full_name }} {% firstof project.customer.get_full_name.strip project.customer.username %}
</p> </p>
{% else %} {% else %}
<p class="nameComm"> <p class="nameComm nameCommAct">
{% if answer.author|class_name == 'User' %} {% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }} {% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %} {% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }} {% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %} {% endif %}
</p> </p>
{% endif %} {% endif %}
@ -705,17 +715,17 @@
<div class="commBlock44 disTab"> <div class="commBlock44 disTab">
{% for message in answer.messages.all %} {% for message in answer.messages.all %}
<div class="comm44 disTab"> <div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1 {% if message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %} {% if message.is_sender_customer %}
<p class="nameComm nameCommAct"> <p class="nameComm nameCommAct">
{{ project.customer.get_full_name }} {% firstof project.customer.get_full_name.strip project.customer.username %}
</p> </p>
{% else %} {% else %}
<p class="nameComm"> <p class="nameComm">
{% if answer.author|class_name == 'User' %} {% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }} {% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %} {% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }} {% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %} {% endif %}
</p> </p>
{% endif %} {% endif %}
@ -899,17 +909,17 @@
<div class="commBlock44 disTab"> <div class="commBlock44 disTab">
{% for message in answer.messages.all %} {% for message in answer.messages.all %}
<div class="comm44 disTab"> <div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1 {% if message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %} {% if message.is_sender_customer %}
<p class="nameComm nameCommAct"> <p class="nameComm nameCommAct">
{{ project.customer.get_full_name }} {% firstof project.customer.get_full_name.strip project.customer.username %}
</p> </p>
{% else %} {% else %}
<p class="nameComm"> <p class="nameComm">
{% if answer.author|class_name == 'User' %} {% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }} {% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %} {% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }} {% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %} {% endif %}
</p> </p>
{% endif %} {% endif %}
@ -1071,17 +1081,17 @@
<div class="commBlock44 disTab"> <div class="commBlock44 disTab">
{% for message in answer.messages.all %} {% for message in answer.messages.all %}
<div class="comm44 disTab"> <div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1 {% if message.is_sender_customer %}-highlighted-message{% endif %}">
{% if message.is_sender_customer %} {% if message.is_sender_customer %}
<p class="nameComm nameCommAct"> <p class="nameComm nameCommAct">
{{ project.customer.get_full_name }} {% firstof project.customer.get_full_name.strip project.customer.username %}
</p> </p>
{% else %} {% else %}
<p class="nameComm"> <p class="nameComm">
{% if answer.author|class_name == 'User' %} {% if answer.author|class_name == 'User' %}
{{ answer.author.get_full_name }} {% firstof answer.author.get_full_name.strip answer.author.username %}
{% elif answer.author|class_name == 'Team' %} {% elif answer.author|class_name == 'Team' %}
{{ answer.author.name }} {% firstof answer.author.name.strip answer.author.owner.username %}
{% endif %} {% endif %}
</p> </p>
{% endif %} {% endif %}

@ -117,7 +117,7 @@
<h4 class="modal-title">Контакты владельца </h4> <h4 class="modal-title">Контакты владельца </h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="row" style="height: 140px;"> <div class="row" style="height: 180px;">
<div class="col-lg-8 col-lg-offset-1"> <div class="col-lg-8 col-lg-offset-1">
<ul class="list-summ"> <ul class="list-summ">
{% if contractor.website %} {% if contractor.website %}
@ -126,6 +126,10 @@
<li>{{ contractor.email }}</li> <li>{{ contractor.email }}</li>
{% if contractor.skype %}
<li>{{ contractor.skype }}</li>
{% endif %}
{% if contractor.phone %} {% if contractor.phone %}
<li>{{ contractor.phone }}</li> <li>{{ contractor.phone }}</li>
{% endif %} {% endif %}
@ -346,20 +350,22 @@
<div id="tab13" class="tab-pane fade"> <div id="tab13" class="tab-pane fade">
<div class="col-lg-9"> <div class="col-lg-9">
<div class="col-lg-12 resume"> {% if contractor == request.user %}
<form enctype="multipart/form-data"> <div class="col-lg-12 resume">
<input type="hidden" name="text" value="Hello"> <form enctype="multipart/form-data">
<input type="hidden" name="text" value="Hello">
<div class="upload2 up-l1">
<input type="file" name="upload" id="upload-resume"> <div class="upload2 up-l1">
<p>Загрузить резюме</p> <input type="file" name="upload" id="upload-resume">
</div> <p>Загрузить резюме</p>
</div>
<div class="upload2 up-l2" id="remove-resume-file" style="display:{% if contractor.contractor_resume.resume_file %}block;{% else %}none;{% endif %}"> <div class="upload2 up-l2" id="remove-resume-file" style="display:{% if contractor.contractor_resume.resume_file %}block;{% else %}none;{% endif %}">
<p style="margin:0;">Удалить резюме</p> <p style="margin:0;">Удалить резюме</p>
</div> </div>
</form> </form>
</div> </div>
{% endif %}
<div class="col-lg-12 resume-block"> <div class="col-lg-12 resume-block">
<div class="block-is box-sizing"> <div class="block-is box-sizing">
@ -412,9 +418,12 @@
</div> </div>
</div> </div>
<div class="col-lg-12 wr-inset-pluss"> <div class="col-lg-12 wr-inset-pluss">
<a href="#" data-toggle="modal" data-target="#resume-text-edit" style="float: left; margin-right: 10px;"> {% if contractor.pk == request.user.pk %}
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> <a href="#" data-toggle="modal" data-target="#resume-text-edit" style="float: left; margin-right: 10px;">
</a> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a>
{% endif %}
<div class="pluss-block" id="resume-text-out"> <div class="pluss-block" id="resume-text-out">
{{ contractor.contractor_resume.text|safe }} {{ contractor.contractor_resume.text|safe }}
</div> </div>
@ -450,10 +459,14 @@
<div class="gal-pluss" id="diplom-cro-gallery"> <div class="gal-pluss" id="diplom-cro-gallery">
<div class="inset-gp"> <div class="inset-gp">
<p class="title-gp">Дипломы / Сертификаты</p> <p class="title-gp">Дипломы / Сертификаты</p>
<div class="upload2 up-l3">
<input type="file" name="file" id="diplom-upload" multiple> {% if contractor == request.user %}
<p>Загрузить файл</p> <div class="upload2 up-l3">
</div> <input type="file" name="file" id="diplom-upload" multiple>
<p>Загрузить файл</p>
</div>
{% endif %}
<div class="galleryWork2 gal-iss disTab" id="diplom-gallery"> <div class="galleryWork2 gal-iss disTab" id="diplom-gallery">
{% for diplom in resume_diploms %} {% for diplom in resume_diploms %}
<div class="col-lg-4"> <div class="col-lg-4">
@ -471,11 +484,14 @@
<p> <p>
{{ diplom.title }} {{ diplom.title }}
</p> </p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2 delete-resume-file" data-id="{{ diplom.pk }}"> {% if contractor.pk == request.user.pk %}
<i class="fa fa-times"></i> <div class="buttonsImg" distab="">
<div class="insetBI insetBI2 delete-resume-file" data-id="{{ diplom.pk }}">
<i class="fa fa-times"></i>
</div>
</div> </div>
</div> {% endif %}
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
@ -483,10 +499,14 @@
</div> </div>
<div class="inset-gp"> <div class="inset-gp">
<p class="title-gp">Допуск СРО</p> <p class="title-gp">Допуск СРО</p>
<div class="upload2 up-l3">
<input type="file" name="file" id="cro-upload"> {% if contractor == request.user %}
<p>Загрузить файл</p> <div class="upload2 up-l3">
</div> <input type="file" name="file" id="cro-upload">
<p>Загрузить файл</p>
</div>
{% endif %}
<div class="galleryWork2 gal-iss disTab" id="cro-gallery"> <div class="galleryWork2 gal-iss disTab" id="cro-gallery">
{% for cro in resume_cro %} {% for cro in resume_cro %}
<div class="col-lg-4"> <div class="col-lg-4">
@ -504,11 +524,14 @@
<p> <p>
{{ cro.title }} {{ cro.title }}
</p> </p>
<div class="buttonsImg" distab="">
<div class="insetBI insetBI2 delete-resume-file" data-id="{{ cro.pk }}"> {% if contractor.pk == request.user.pk %}
<i class="fa fa-times"></i> <div class="buttonsImg" distab="">
<div class="insetBI insetBI2 delete-resume-file" data-id="{{ cro.pk }}">
<i class="fa fa-times"></i>
</div>
</div> </div>
</div> {% endif %}
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

@ -53,11 +53,13 @@
<li><span>{{ proj.get_team_answers|length }}</span> ответ от имени группы</li> <li><span>{{ proj.get_team_answers|length }}</span> ответ от имени группы</li>
</ul> </ul>
<ul class="color-menu"> {% if request.user == customer %}
<li><a href="{% url 'projects:detail' proj.pk %}#new-answers">Новые: {{ proj|get_new_answers|length }}</a></li> <ul class="color-menu">
<li><a href="{% url 'projects:detail' proj.pk %}#candidate-answers">Кандидаты: {{ proj|get_candidate_answers|length }}</a></li> <li><a href="{% url 'projects:detail' proj.pk %}#new-answers">Новые: {{ proj|get_new_answers|length }}</a></li>
<li><a href="{% url 'projects:detail' proj.pk %}#rejected-answers">Отказал: {{ proj|get_rejected_answers|length }}</a></li> <li><a href="{% url 'projects:detail' proj.pk %}#candidate-answers">Кандидаты: {{ proj|get_candidate_answers|length }}</a></li>
</ul> <li><a href="{% url 'projects:detail' proj.pk %}#rejected-answers">Отказал: {{ proj|get_rejected_answers|length }}</a></li>
</ul>
{% endif %}
<p class="textPro"> <p class="textPro">
{{ proj.text }} {{ proj.text }}

@ -53,14 +53,16 @@
<a href="{{ a }}">Открытые проекты</a> <a href="{{ a }}">Открытые проекты</a>
</li> </li>
<li role="presentation" {% if request.path == b %}class="active"{% endif %}> {% if request.user == customer %}
<a href="{{ b }}">Текущие проекты</a> <li role="presentation" {% if request.path == b %}class="active"{% endif %}>
<a href="{{ b }}">Текущие проекты</a>
<div class="roundsCount"> <div class="roundsCount">
<div class="countR">0</div> <div class="countR">0</div>
<div class="countG">0</div> <div class="countG">0</div>
</div> </div>
</li> </li>
{% endif %}
<li role="presentation" {% if request.path == c %}class="active"{% endif %}> <li role="presentation" {% if request.path == c %}class="active"{% endif %}>
<a href="{{ c }}">Отзывы</a> <a href="{{ c }}">Отзывы</a>

@ -394,6 +394,7 @@ class ContractorProfileView(BaseMixin, DetailView):
context['portfolio_form'] = self.portfolio_form_class context['portfolio_form'] = self.portfolio_form_class
display_team_invitation_button = \ display_team_invitation_button = \
request_user.is_authenticated() and \
request_user.is_contractor() and \ request_user.is_contractor() and \
contractor != request_user and \ contractor != request_user and \
request_user.has_team() and \ request_user.has_team() and \

@ -9,9 +9,11 @@ class WithDrawForm(forms.ModelForm):
model = WithDraw model = WithDraw
fields = ( fields = (
'passport',
'phone',
'sum', 'sum',
'yandex_card',
'user', 'user',
'yandex_card',
) )

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-16 16:33
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wallets', '0015_auto_20160902_1904'),
]
operations = [
migrations.AddField(
model_name='withdraw',
name='passport',
field=models.CharField(default=0, max_length=50),
preserve_default=False,
),
migrations.AddField(
model_name='withdraw',
name='phone',
field=models.CharField(default='+7 000 000 00 00', max_length=30),
preserve_default=False,
),
]

@ -54,11 +54,13 @@ class InvoiceHistory(models.Model):
class WithDraw(models.Model): class WithDraw(models.Model):
sum = models.DecimalField(max_digits=10, decimal_places=0, validators=[MinValueValidator(1)]) complete = models.BooleanField(default=False)
created = models.DateTimeField(default=timezone.now) created = models.DateTimeField(default=timezone.now)
yandex_card = models.CharField(max_length=30) passport = models.CharField(max_length=50)
phone = models.CharField(max_length=30)
sum = models.DecimalField(max_digits=10, decimal_places=0, validators=[MinValueValidator(1)])
user = models.ForeignKey(User, related_name='with_draw') user = models.ForeignKey(User, related_name='with_draw')
complete = models.BooleanField(default=False) yandex_card = models.CharField(max_length=30)
def __str__(self): def __str__(self):
return self.yandex_card return self.yandex_card

@ -53,6 +53,17 @@
<input type="text" name="{{ form.yandex_card.html_name }}"> <input type="text" name="{{ form.yandex_card.html_name }}">
<input type="hidden" name="{{ form.user.html_name }}" value="{{ user_score.pk }}"> <input type="hidden" name="{{ form.user.html_name }}" value="{{ user_score.pk }}">
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Телефон <span style="color: red; margin-left:8px; font-size: 12px;" class="error-{{ form.phone.html_name }}"></span></p>
<input type="text" name="{{ form.phone.html_name }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Номер паспорта <span style="color: red; margin-left:8px; font-size: 12px;" class="error-{{ form.passport.html_name }}"></span></p>
<input type="text" name="{{ form.passport.html_name }}">
</div>
</div> </div>
</div> </div>

@ -46,6 +46,7 @@ class WorkSellForm(forms.ModelForm):
'term', 'term',
'term_type', 'term_type',
) )
widgets = { widgets = {
'construction_type': forms.Select(attrs={'class': 'selectpicker'}), 'construction_type': forms.Select(attrs={'class': 'selectpicker'}),
'building_classification': forms.Select(attrs={'class': 'selectpicker'}), 'building_classification': forms.Select(attrs={'class': 'selectpicker'}),

@ -39,7 +39,7 @@
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p> <p>Специализации <span style="color: red">{{ form.specialization.errors.as_text }}</span></p>
</div> </div>
<div class="-spec-select-container"> <div class="-spec-select-container">
@ -64,7 +64,7 @@
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ form.budget.errors.as_text }}</p> <p>Бюджет <span style="color: red">{{ form.budget.errors.as_text }}</span></p>
<div class="row"> <div class="row">
<div class="col-lg-8"> <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.budget.html_name }}" value="{{ form.budget.value }}">
@ -76,7 +76,7 @@
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ form.budget.errors.as_text }}</p> <p>Срок выполнения <span style="color: red">{{ form.budget.errors.as_text }}</span></p>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}"> <input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}">
@ -90,17 +90,17 @@
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<p>Вид строительства</p> <p>Вид строительства <span style="color: red">{{ form.construction_type.errors.as_text }}</span></p>
{{ form.construction_type}} {{ form.construction_type }}
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<p>Классификация здания</p> <p>Классификация здания <span style="color: red">{{ form.building_classification.errors.as_text }}</span></p>
{{ form.building_classification}} {{ form.building_classification }}
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab -live-image-upload-container"> <div class="textAreaBlock2 text-nn box-sizing disTab -live-image-upload-container">
<p>Фотографии</p> <p>Фотографии <span style="color: red">{{ form.photos.errors.as_text }}</span></p>
{% for photo in form.photos.field.queryset.all %} {% for photo in form.photos.field.queryset.all %}
<div class="col-lg-3 -image-widget"> <div class="col-lg-3 -image-widget">

Loading…
Cancel
Save