#ARC-12 Extended characteristics

remotes/origin/setup
ArturBaybulatov 10 years ago
parent c2db336f74
commit 2e983bc3ca
  1. 7
      common/templatetags/common_tags.py
  2. 47
      projects/forms.py
  3. 21
      projects/migrations/0033_auto_20160621_1057.py
  4. 8
      projects/models.py
  5. 359
      projects/templates/customer_project_create.html
  6. 71
      projects/views.py

@ -15,3 +15,10 @@ def inspect2(context, obj):
return { return {
'obj': pformat(dir(obj)), 'obj': pformat(dir(obj)),
} }
@register.simple_tag
def interact(**kwargs):
import code; code.interact(local=dict(kwargs, **dict(globals(), **locals())))
# import code; code.interact(local=dict(globals(), **locals()))

@ -1,6 +1,5 @@
from django import forms from django import forms
from django.db.models import Q from django.db.models import Q
from django.forms import ModelForm, HiddenInput, Form, Select
from django.forms.models import inlineformset_factory from django.forms.models import inlineformset_factory
from mptt.forms import TreeNodeChoiceField from mptt.forms import TreeNodeChoiceField
@ -11,11 +10,11 @@ from users.models import User
# RealtyFormSet = inlineformset_factory(Project, Realty) # RealtyFormSet = inlineformset_factory(Project, Realty)
class ProjectsForm(Form): class ProjectsForm(forms.Form):
name = forms.CharField(max_length=255) name = forms.CharField(max_length=255)
class CustomerProjectCreateForm(ModelForm): class CustomerProjectCreateForm(forms.ModelForm):
specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1)) specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1))
class Meta: class Meta:
@ -29,6 +28,7 @@ class CustomerProjectCreateForm(ModelForm):
'deal_type', 'deal_type',
'name', 'name',
'price_and_term_required', 'price_and_term_required',
'realty',
'specialization', 'specialization',
'term_type', 'term_type',
'text', 'text',
@ -36,42 +36,51 @@ class CustomerProjectCreateForm(ModelForm):
) )
widgets = { widgets = {
'specialization': Select(attrs={'class':'selectpicker'}), 'currency': forms.Select(attrs={'class':'selectpicker2 valul'}),
'currency': Select(attrs={'class':'selectpicker2 valul'}), 'realty': forms.Select(attrs={'class':'selectpicker'}),
'term_type': Select(attrs={'class':'selectpicker'}), 'specialization': forms.Select(attrs={'class':'selectpicker'}),
'term_type': forms.Select(attrs={'class':'selectpicker'}),
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request') self.request = kwargs.pop('request')
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['realty'].empty_label = 'Создать новый'
class RealtyForm(ModelForm):
class RealtyForm(forms.ModelForm):
class Meta: class Meta:
model = Realty model = Realty
fields = ( fields = (
'building_classification', 'building_classification',
'construction_type', 'construction_type',
'location',
'name', 'name',
) )
widgets = { widgets = {
'construction_type': Select(attrs={'class':'selectpicker'}), 'construction_type': forms.Select(attrs={'class':'selectpicker'}),
'building_classification': Select(attrs={'class':'selectpicker'}), 'building_classification': forms.Select(attrs={'class':'selectpicker'}),
} }
class Realty1Form(Form): def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
class Realty1Form(forms.Form):
pass pass
class PortfolioForm(ModelForm): class PortfolioForm(forms.ModelForm):
class Meta: class Meta:
model = Portfolio model = Portfolio
fields = '__all__' fields = '__all__'
class ContractorProjectAnswerForm(ModelForm): class ContractorProjectAnswerForm(forms.ModelForm):
# def __init__(self, *args, **kwargs): # def __init__(self, *args, **kwargs):
# # import code; code.interact(local=dict(globals(), **locals())) # # import code; code.interact(local=dict(globals(), **locals()))
# self.project_id = kwargs.pop('project_id') # self.project_id = kwargs.pop('project_id')
@ -90,12 +99,12 @@ class ContractorProjectAnswerForm(ModelForm):
) )
widgets = { widgets = {
'currency': Select(attrs={'class':'selectpicker'}), 'currency': forms.Select(attrs={'class':'selectpicker'}),
'term_type': Select(attrs={'class':'selectpicker'}), 'term_type': forms.Select(attrs={'class':'selectpicker'}),
} }
class StageForm(ModelForm): class StageForm(forms.ModelForm):
class Meta: class Meta:
model = Stage model = Stage
@ -112,7 +121,7 @@ class StageForm(ModelForm):
PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',)) PortfolioPhotoFormSet = inlineformset_factory(Portfolio, PortfolioPhoto, fields=('img',))
class ProjectEditForm(forms.ModelForm): class CustomerProjectEditForm(forms.ModelForm):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
class Meta: class Meta:
@ -126,7 +135,7 @@ class ProjectEditForm(forms.ModelForm):
self.fields['pk'].queryset = self.req.user.projects.filter(state='active') self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
class ProjectTrashForm(Form): class CustomerProjectTrashForm(forms.Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -136,7 +145,7 @@ class ProjectTrashForm(Form):
self.fields['pk'].queryset = self.req.user.projects.filter(state='active') self.fields['pk'].queryset = self.req.user.projects.filter(state='active')
class ProjectRestoreForm(Form): class CustomerProjectRestoreForm(forms.Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -146,7 +155,7 @@ class ProjectRestoreForm(Form):
self.fields['pk'].queryset = self.req.user.projects.filter(state='trashed') self.fields['pk'].queryset = self.req.user.projects.filter(state='trashed')
class ProjectDeleteForm(Form): class CustomerProjectDeleteForm(forms.Form):
pk = forms.ModelChoiceField(queryset=Project.objects.none()) pk = forms.ModelChoiceField(queryset=Project.objects.none())
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-21 07:57
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('projects', '0032_auto_20160615_1610'),
]
operations = [
migrations.AlterField(
model_name='project',
name='realty',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='projects.Realty'),
),
]

@ -80,8 +80,8 @@ class Project(models.Model):
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES)
customer = models.ForeignKey(User, related_name='projects') customer = models.ForeignKey(User, related_name='projects')
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
price_and_term_required = models.BooleanField(default=False, blank=True) price_and_term_required = models.BooleanField(default=False)
realty = models.ForeignKey(Realty, null=True, related_name='projects') realty = models.ForeignKey(Realty, blank=True, null=True, related_name='projects')
deal_type = models.CharField(max_length=20, default='secure_deal', choices=DEAL_TYPES) deal_type = models.CharField(max_length=20, default='secure_deal', choices=DEAL_TYPES)
specialization = models.ForeignKey(Specialization, related_name='projects') specialization = models.ForeignKey(Specialization, related_name='projects')
term = models.IntegerField(default=0) term = models.IntegerField(default=0)
@ -98,9 +98,7 @@ class Project(models.Model):
verbose_name_plural = 'Проекты' verbose_name_plural = 'Проекты'
def secure_deal(self): def secure_deal(self):
if self.deal_type == 'secure_deal': return self.deal_type == 'secure_deal'
return True
return False
class ProjectFile(models.Model): class ProjectFile(models.Model):

@ -1,5 +1,7 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
@ -9,186 +11,247 @@
<p class="titleScore">Новый заказ</p> <p class="titleScore">Новый заказ</p>
</div> </div>
<form method="post"> <form action="{% url 'projects:customer-project-create' %}" method="POST">
{% csrf_token %} {% csrf_token %}
{{ form.errors }}
{{ form_realty.errors }} <div class="chatBlock new-rass new-rass2 disTab">
<div class="chatBlock new-rass new-rass2 disTab"> <div class="col-lg-9">
<div class="col-lg-9"> <p class="new-pp new-pp3">Формирование заказа</p>
<p class="new-pp new-pp3">Формирование заказа</p>
<div class="textAreaBlock2 text-nn box-sizing disTab"> {% if form.non_field_errors %}
<p>Название заказа</p> <div class="new-pp3" style="color: red; margin-top: 70px">{{ form.non_field_errors }}</div>
<input type="text" class="box-sizing" name="{{ form.name.name }}" value="{{ form.name.value }}"> {% endif %}
</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.name.errors.as_text }}</span></p>
<textarea name="{{ form.text.name }}" id="text-new" value="{{ form.text.value }}"></textarea> <input type="text" class="box-sizing" name="{{ form.name.name }}" value="{{ form.name.value }}">
</div>
</div>
<div class="col-lg-3 wrChat1">
<div class="messageBlock box-sizing disTab">
<p>Дополнительно</p>
</div>
<div class="col-lg-12 documentsChat">
<div class="upload">
<input type="file" name="upload"/>
<p>+ добавить файл (до 100 файлов)</p>
</div>
<ul class="list-new-new">
<li>
Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
</ul>
</div>
<p class="type-work">Тип работы:</p>
<div class="mail-block type-work-inset">
<div class="inset-mb">
<label><input type="radio" value="1" name="{{ form.work_type.name }}"><span></span></label>
<p>Проектирование</p>
</div>
<div class="inset-mb">
<label><input type="radio" value="2" name="{{ form.work_type.name }}"><span></span></label>
<p>Техническое сопровождение</p>
</div>
</div>
<div class="textAreaBlock2 box-sizing disTab">
<a href="javascriptt:void(0)" class="new-link new-lw">+ Добавить раздел</a>
</div>
</div>
</div>
<div class="col-lg-12 new-filter">
<div class="filter clearfix">
<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>
<div class="polsF1 disTab">
<div class="col-lg-3">
{{ form.specialization }}
</div>
<div class="col-lg-3">
<select class="selectpicker" disabled>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker" disabled>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker" disabled>
</select>
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Бюджет</div>
<div class="col-lg-8"></div>
</div>
<div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" class="box-sizing surr" name="{{ form.budget.name }}" value="{{ form.budget.value }}">
{{ form.currency }}
</div>
<div class="col-lg-3">
{{ form.term_type }}
</div> </div>
<div class="col-lg-5 dog-new">
<label>
<input type="checkbox" name="{{ form.budget_by_agreement.name }}"><span></span></label> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>или по договоренности</p> <p>Подробно опишите задание <span style="color: red">{{ form.text.errors.as_text }}</span></p>
<textarea name="{{ form.text.name }}" id="text-new">{{ form.text.value }}</textarea>
</div> </div>
</div> </div>
<div class="searchF1 polsF1 polsFF make-new"> <div class="col-lg-3 wrChat1">
<label><input type="checkbox" name="{{ form.price_and_term_required.name }}"><span></span></label> <div class="messageBlock box-sizing disTab">
<p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p> <p>Дополнительно</p>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-12">Способ оплаты</div>
</div>
<div class="searchF1 polsF1 polsFF radio-afer">
<div class="col-lg-6">
<label><input type="radio" name="{{ form.deal_type.name }}" value="secure_deal"><span></span></label>
<p class="text-afer">
Безопасная сделка (с резервированием бюджета)
</p>
<p class="des-afer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia
</p>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-12 documentsChat">
<label><input type="radio" name="{{ form.deal_type.name }}" value="direct_payment"><span></span></label> <div class="upload">
<p class="text-afer"> <input type="file" name="upload"/>
Прямая оплата Исполнителю на его кошелек/счет <p>+ добавить файл (до 100 файлов)</p>
</p> </div>
<p class="des-afer"> <ul class="list-new-new">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia <li>
</p> Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
</ul>
</div> </div>
</div>
<div class="resSearchF1"> <p class="type-work">Тип работы <span style="color: red">{{ form.work_type.errors.as_text }}</span></p>
<div class="col-lg-3"> <div class="mail-block type-work-inset">
<p class="titleResF1">Расширенный поиск</p> {% for id, name in form.work_type.field.choices %}
<button class="resButtonF1"> <div class="inset-mb">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span> <label>
</button> <input
type="radio"
value="{{ id }}"
{% if id == form.work_type.value %}checked{% endif %}
name="{{ form.work_type.name }}">
<span></span>
</label>
<p>{{ name }}</p>
</div>
{% endfor %}
</div> </div>
<div class="col-lg-9"> <div class="textAreaBlock2 box-sizing disTab">
<div class="borderS1"></div> <a href="#" class="new-link new-lw">+ Добавить раздел</a>
</div> </div>
</div> </div>
<div class="slideRes disTab activeSlide"> </div>
<div class="col-lg-12 new-filter">
<div class="filter clearfix">
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-3">Выбор объекта:</div> <div class="col-lg-12">Специализация проекта <span style="color: red">{{ form.specialization.errors.as_text }}</span></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>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> {{ form.specialization }}
{% for realty in realty_list %}
<option>{{ realty.name }}</option>
{% endfor %}
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type="text" name="form_2-{{ form_realty.name.name }}" class="box-sizing surr surr2" value="{{ form_realty.name.value }}"> <select class="selectpicker" disabled>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ form_realty.building_classification }} <select class="selectpicker" disabled>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ form_realty.construction_type }} <select class="selectpicker" disabled>
</select>
</div> </div>
</div> </div>
<div class="titleF1 disTab"> <div class="titleF1 titleF2 disTab">
<div class="col-lg-12">Местоположение:</div> <div class="col-lg-12">Бюджет <span style="color: red">{{ form.budget.errors.as_text }}</span></div>
<!--<div class="col-lg-8"></div>-->
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" class="box-sizing surr" name="{{ form.budget.name }}" value="{{ form.budget.value }}">
{{ form.currency }}
</div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ form_realty.country }} {{ form.term_type }}
</div> </div>
<div class="col-lg-5 dog-new">
<label>
<input
type="checkbox"
{% if form.budget_by_agreement.value %}checked{% endif %}
name="{{ form.budget_by_agreement.name }}">
<span></span>
</label>
<p>или по договоренности</p>
</div>
</div>
<div class="searchF1 polsF1 polsFF make-new">
<label>
<input
type="checkbox"
{% if form.price_and_term_required.value %}checked{% endif %}
name="{{ form.price_and_term_required.name }}">
<span></span>
</label>
<p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-12">Способ оплаты <span style="color: red">{{ form.deal_type.errors.as_text }}</span></div>
</div>
<div class="searchF1 polsF1 polsFF radio-afer">
<div class="col-lg-6">
<label>
<input
type="radio"
name="{{ form.deal_type.name }}"
{% if form.deal_type.value == 'secure_deal' %}checked{% endif %}
value="secure_deal">
<span></span>
</label>
<p class="text-afer">
Безопасная сделка (с резервированием бюджета)
</p>
<p class="des-afer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia
</p>
</div>
<div class="col-lg-6">
<label>
<input
type="radio"
name="{{ form.deal_type.name }}"
{% if form.deal_type.value == 'direct_payment' %}checked{% endif %}
value="direct_payment">
<span></span>
</label>
<p class="text-afer">
Прямая оплата Исполнителю на его кошелек/счет
</p>
<p class="des-afer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro vel suscipit eaque quidem voluptate aperiam enim aut libero, excepturi architecto maxime, placeat maiores, odio itaque, ex consectetur dignissimos dicta officia
</p>
</div>
</div>
<div class="resSearchF1">
<div class="col-lg-3"> <div class="col-lg-3">
{{ form_realty.city }} <p class="titleResF1">Расширенный поиск</p>
<button class="resButtonF1">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button>
</div> </div>
<div class="col-lg-6 make-new"> <div class="col-lg-9">
<label><input type="checkbox" name="{{ form.cro.name }}"><span></span></label> <div class="borderS1"></div>
<p>Требуется допуск СРО</p>
</div> </div>
</div> </div>
<div class="slideRes disTab activeSlide">
<div class="titleF1 disTab">
<div class="col-lg-3">Выбор объекта<br><span style="color: red">{{ form.realty.errors.as_text }}</span></div>
<div class="col-lg-3">Наименование<br><span style="color: red">{{ realty_form.name.errors.as_text }}</span></div>
<div class="col-lg-3">Классификация здания<br><span style="color: red">{{ realty_form.building_classification.errors.as_text }}</span></div>
<div class="col-lg-3">Вид строительства<br><span style="color: red">{{ realty_form.construction_type.errors.as_text }}</span></div>
</div>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
{# <select class="selectpicker">#}
{# {% for realty in realty_list %}#}
{# <option>{{ realty.name }}</option>#}
{# {% endfor %}#}
{# </select>#}
{{ form.realty }}
</div>
<div class="col-lg-3">
<input type="text" name="form_2-{{ realty_form.name.name }}" class="box-sizing surr surr2" value="{{ realty_form.name.value }}">
</div>
<div class="col-lg-3">
{{ realty_form.building_classification }}
</div>
<div class="col-lg-3">
{{ realty_form.construction_type }}
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-12">Местоположение:</div>
</div>
<div class="polsF1 polsF2 disTab">
{# <div class="col-lg-3">#}
{# {{ realty_form.country }}#}
{# </div>#}
{# <div class="col-lg-3">#}
{# {{ realty_form.city }}#}
{# </div>#}
<div class="col-lg-6 make-new">
<label><input type="checkbox" name="{{ form.cro.name }}"><span></span></label>
<p>Требуется допуск СРО</p>
</div>
</div>
<div class="searchF1 polsF1 polsFF links-filter"> <div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить проект"/> <input class="btn-submit-link" type="submit" value="Разместить проект"/>
<a href="javascript:void(0)">Сохранить</a> <a href="javascript:void(0)">Сохранить</a>
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
</form> </form>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}

@ -17,10 +17,10 @@ from .forms import (
ContractorProjectAnswerForm, ContractorProjectAnswerForm,
CustomerProjectCreateForm, CustomerProjectCreateForm,
PortfolioForm, PortfolioForm,
ProjectDeleteForm, CustomerProjectDeleteForm,
ProjectEditForm, CustomerProjectEditForm,
ProjectRestoreForm, CustomerProjectRestoreForm,
ProjectTrashForm, CustomerProjectTrashForm,
RealtyForm, RealtyForm,
) )
@ -63,14 +63,16 @@ from .forms import (
class CustomerProjectCreateView(BaseMixin, View): class CustomerProjectCreateView(BaseMixin, View):
form_class = CustomerProjectCreateForm form_class = CustomerProjectCreateForm
realty_form = RealtyForm
template_name = 'customer_project_create.html' template_name = 'customer_project_create.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): if request.user.is_authenticated() and request.user.is_customer():
form = self.form_class(request=request) form = self.form_class(request=request)
realty_form = self.realty_form(request=request)
context = self.get_context_data(**_.merge({}, request.GET, kwargs)) context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'form': form}) context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context) return render(request, self.template_name, context)
else: else:
@ -78,7 +80,8 @@ class CustomerProjectCreateView(BaseMixin, View):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): if request.user.is_authenticated() and request.user.is_customer():
form = self.form_class(_.merge({}, request.POST, kwargs), request=request) form = self.form_class(request.POST, request=request)
realty_form = None
if form.is_valid(): if form.is_valid():
project = form.save(commit=False) project = form.save(commit=False)
@ -86,15 +89,47 @@ class CustomerProjectCreateView(BaseMixin, View):
project.save() project.save()
form.save_m2m() form.save_m2m()
messages.info(request, 'Проект успешно создан') realty = form.cleaned_data.get('realty')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to) if realty:
else: realty_form = self.realty_form(request.POST, instance=realty, request=request) # Modify an existing realty
context = self.get_context_data(**kwargs)
context.update({'form': form}) if realty_form.is_valid():
realty_form.save()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
else:
realty_form = self.realty_form(request.POST, request=request) # Create a new realty
messages.info(request, 'Произошла ошибка: <pre>{msg}</pre>'.format(msg=pformat(form.errors))) if realty_form.is_valid():
return render(request, self.template_name, context) realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
context = self.get_context_data(**kwargs)
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
else: else:
return HttpResponseForbidden('403 Forbidden') return HttpResponseForbidden('403 Forbidden')
@ -126,7 +161,7 @@ class ProjectView(BaseMixin, View):
class CustomerProjectEditView(BaseMixin, View): class CustomerProjectEditView(BaseMixin, View):
form_class = ProjectEditForm form_class = CustomerProjectEditForm
template_name = 'customer_project_edit_test.html' # 'customer_project_edit.html' template_name = 'customer_project_edit_test.html' # 'customer_project_edit.html'
def get(self, req, *args, **kwargs): def get(self, req, *args, **kwargs):
@ -185,7 +220,7 @@ class ContractorProjectAnswerView(BaseMixin, View):
class CustomerProjectTrashView(View): class CustomerProjectTrashView(View):
form_class = ProjectTrashForm form_class = CustomerProjectTrashForm
def post(self, req, *args, **kwargs): def post(self, req, *args, **kwargs):
if req.user.is_authenticated(): if req.user.is_authenticated():
@ -207,7 +242,7 @@ class CustomerProjectTrashView(View):
class CustomerProjectRestoreView(View): class CustomerProjectRestoreView(View):
form_class = ProjectRestoreForm form_class = CustomerProjectRestoreForm
def post(self, req, *args, **kwargs): def post(self, req, *args, **kwargs):
if req.user.is_authenticated(): if req.user.is_authenticated():
@ -229,7 +264,7 @@ class CustomerProjectRestoreView(View):
class CustomerProjectDeleteView(View): class CustomerProjectDeleteView(View):
form_class = ProjectDeleteForm form_class = CustomerProjectDeleteForm
def post(self, req, *args, **kwargs): def post(self, req, *args, **kwargs):
if req.user.is_authenticated(): if req.user.is_authenticated():

Loading…
Cancel
Save