remotes/origin/setup
ArturBaybulatov 10 years ago
parent d384391782
commit 60c05d0310
  1. 2
      archilance/management/commands/generate_reviews.py
  2. 1
      archilance/management/commands/generate_users.py
  3. 6
      archilance/util.py
  4. 26
      projects/migrations/0004_auto_20160726_1931.py
  5. 7
      templates/home.html
  6. 12
      templates/partials/base.html
  7. 4
      users/admin.py
  8. 6
      users/forms.py
  9. 29
      users/migrations/0003_auto_20160726_1931.py
  10. 1
      users/mixins.py
  11. 4
      users/models.py
  12. 7
      users/templates/contractor_profile.html
  13. 26
      users/templates/contractor_profile_edit.html
  14. 207
      users/templates/customer_profile_edit.html
  15. 4
      users/templates/partials/customer_profile_info_block.html
  16. 4
      users/urls.py
  17. 96
      users/views.py

@ -23,7 +23,7 @@ class Command(BaseCommand):
review.project = Project.objects.order_by('?').first()
review.stars = _.random(1, 5)
review.text = util.lorem(_.random(5, 15))
review.text = util.lorem()
review.is_secured = _.sample((True, False))
review.save()

@ -81,6 +81,7 @@ class Command(BaseCommand):
return User.objects.create(
first_name='Василий',
last_name='Пупкин',
patronym='Иванович',
username=username,
email='%s@example.com' % username,
is_active=True,

@ -1,6 +1,7 @@
from django.shortcuts import _get_queryset
from django.utils import timezone
from pprint import pprint, pformat
import natsort
import pydash as _; _.map = _.map_; _.filter = _.filter_
import random
@ -59,13 +60,14 @@ def get_attr_or_none(klass, *args, attr=None, **kwargs):
def model_fields(model, width=200):
fields = natsort.natsorted(model._meta.get_fields(), key=lambda f: f.name)
pprint([(
f.name,
'Relation? %s' % f.is_relation,
'Null? %s' % f.null,
'Blank? %s' % f.blank if not f.is_relation else '(relation)',
'Hidden? %s' % (f.is_hidden() if hasattr(f, 'is_hidden') else False),
) for f in model._meta.get_fields(include_hidden=True)], width=width)
) for f in fields], width=width)
def lorem(sentences=5):

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-26 16:31
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('projects', '0003_auto_20160725_1606'),
]
operations = [
migrations.AlterModelOptions(
name='stage',
options={'ordering': ['pos'], 'verbose_name': 'Этап', 'verbose_name_plural': 'Этапы'},
),
migrations.AlterField(
model_name='stage',
name='created',
field=models.DateTimeField(default=datetime.datetime(2016, 7, 26, 16, 31, 5, 738741, tzinfo=utc)),
),
]

@ -6,14 +6,7 @@
{% include 'partials/header.html' %}
<div class="container-fluid">
<div class="row">
{# {% url "password_reset_recover" %}#}
<p class="welcomeMain">Основная задача сайта</p>
<p style="font-size: 25px; line-height: initial; font-weight: bold">
Authed? {{ request.user.is_authenticated }}<br>
{{ request.user }} ({{ request.user.pk }})<br>
{{ request.user.groups.all }}<br>
</p>
</div>
</div>

@ -31,10 +31,19 @@
<body>
{% if messages %}
{% for message in messages %}
<div class="c" style='padding: 10px; margin-bottom: 6px'>{{ message | safe }}</div>
<div class="c" style="position: relative; padding: 10px; margin-bottom: 6px; z-index: 100">{{ message|safe }}</div>
{% endfor %}
{% endif %}
<div style="position: absolute; left: 0; top: 0; padding: 6px; color: black; background-color: #BADA55; z-index: 50">
{{ request.user }}<br>
{% if request.user.is_authenticated %}
<b>PK:</b> {{ request.user.pk }}<br>
<b>Groups:</b> {{ request.user.groups.all }}
{% endif %}
</div>
{% block content %}{% endblock %}
<script src='{% static "lib/lodash/lodash.js" %}'></script>
@ -50,6 +59,7 @@
<script src='{% static "lib/jquery.fileupload/js/jquery.iframe-transport.js" %}'></script>
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload.js" %}'></script>
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload-process.js" %}'></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script>

@ -1,6 +1,6 @@
from django.contrib import admin
from .models import User, Team, ContractorFinancialInfo, ContractorResume, ContractorResumeFiles
from .models import User, Team, UserFinancialInfo, ContractorResume, ContractorResumeFiles
class UserAdmin(admin.ModelAdmin):
@ -11,7 +11,7 @@ class UserAdmin(admin.ModelAdmin):
return ', '.join(g.name for g in obj.groups.all())
admin.site.register(User, UserAdmin)
admin.site.register(ContractorFinancialInfo)
admin.site.register(UserFinancialInfo)
admin.site.register(Team)
admin.site.register(ContractorResume)
admin.site.register(ContractorResumeFiles)

@ -3,7 +3,7 @@ from django.forms import ModelForm
import itertools
import pydash as _; _.map = _.map_; _.filter = _.filter_
from .models import User, ContractorFinancialInfo
from .models import User, UserFinancialInfo
from common.models import Location
from projects.models import Project, Realty, BuildingClassfication, ConstructionType
from specializations.models import Specialization
@ -131,7 +131,7 @@ class CustomerProfileProjectRealtyForm(forms.Form):
)
class ContractorFinancicalInfoForm(ModelForm):
class UserFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['residency'].choices = self.fields['residency'].choices[1:]
@ -141,7 +141,7 @@ class ContractorFinancicalInfoForm(ModelForm):
# self.fields['residency'].widget.choices = self.fields['residency'].choices
class Meta:
model = ContractorFinancialInfo
model = UserFinancialInfo
fields = (
'fio',

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-26 16:31
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('users', '0002_auto_20160725_1605'),
]
operations = [
migrations.RenameModel(
old_name='ContractorFinancialInfo',
new_name='UserFinancialInfo',
),
migrations.RemoveField(
model_name='user',
name='contractor_financial_info',
),
migrations.AddField(
model_name='user',
name='financial_info',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user', to='users.UserFinancialInfo'),
),
]

@ -3,7 +3,6 @@ from django.contrib import messages
class CheckForUserMixin(object):
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
pk = kwargs.get('pk')

@ -41,7 +41,7 @@ class CustomerUserManager(models.Manager):
return super().get_queryset().filter(groups__name='Заказчики')
class ContractorFinancialInfo(models.Model):
class UserFinancialInfo(models.Model):
RESIDENCIES = (
('russian_resident', 'Резидент РФ'),
('non_russian_resident', 'Нерезидент РФ'),
@ -117,7 +117,6 @@ class User(AbstractBaseUser, PermissionsMixin):
)
avatar = models.ImageField(upload_to='users/avatars/', blank=True)
contractor_financial_info = models.OneToOneField(ContractorFinancialInfo, related_name='contractor', blank=True, null=True)
contractor_resume = models.OneToOneField(ContractorResume, related_name='contractor', blank=True, null=True)
contractor_specializations = TreeManyToManyField(Specialization, related_name='contractors', blank=True)
contractor_status = models.CharField(default='free', max_length=20, choices=STATUSES)
@ -126,6 +125,7 @@ class User(AbstractBaseUser, PermissionsMixin):
date_joined = models.DateTimeField(default=timezone.now)
date_of_birth = models.DateTimeField(null=True, blank=True)
email = models.EmailField(max_length=255, unique=True, db_index=True)
financial_info = models.OneToOneField(UserFinancialInfo, related_name='user', blank=True, null=True)
first_name = models.CharField(max_length=255, blank=True)
gender = models.CharField(max_length=30, choices=GENDERS, blank=True)
is_active = models.BooleanField(default=True)

@ -1,6 +1,7 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load projects_tags %}
{% load specializtions_tags %}
{% load thumbnail %}
@ -70,7 +71,7 @@
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="nameUser">
{{ contractor.get_full_name }}[{{ contractor.username }}]
{{ contractor.get_full_name }} [{{ contractor.username }}]
</p>
<p class="cityUser">Россия, Москва</p>
<p class="navv">На сайте 8 лет и 3 месяца</p>
@ -80,11 +81,9 @@
<a href="javascript:void(0)" class="showCon">показать контакты</a>
</div>
<div class="col-lg-4">
{% load specializtions_tags %}
{% specialization_widget contractor.pk %}
</div>
<div class="col-lg-4">
{% load projects_tags %}
{% ratings_widget contractor.pk %}
{% if contractor.cro %}

@ -15,19 +15,19 @@
{% load mptt_tags %}
{{ 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="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>

@ -1,113 +1,126 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load thumbnail %}
{% block content %}
{% include 'partials/header.html' %}
{% 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 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' %}
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
<script>
$(function(){
function getCookie(name) {

@ -21,13 +21,13 @@
</div>
<div class="col-lg-4 new-er">
{% ratings_widget customer.pk %}
{% ratings_widget pk %}
</div>
<div class="col-lg-4">
<a href="javascript:void(0)" class="new-prop new-prop1">показать контакты</a>
<a href="javascript:void(0)" class="new-prop new-prop2">написать сообщение</a>
<a href="{% url 'users:customers-edit' pk=customer.pk %}" class="new-red">редактировать профиль</a>
<a href="{% url 'users:customers-edit' pk=pk %}" class="new-red">редактировать профиль</a>
</div>
</div>

@ -7,7 +7,7 @@ from .views import (
# UserInfoListView,
# UserView,
ContractorFilterView,
ContractorFinancialInfoEdit,
UserFinancialInfoEditView,
ContractorOfficeDetailView,
ContractorProfileDetailView,
ContractorProfileEditView,
@ -40,5 +40,5 @@ urlpatterns = [
# urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit'),
urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit'),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', ContractorFinancialInfoEdit.as_view(), name='contractor-financical'),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', UserFinancialInfoEditView.as_view(), name='contractor-financical'),
]

@ -14,7 +14,7 @@ import natsort
import pydash as _; _.map = _.map_; _.filter = _.filter_
from .mixins import CheckForUserMixin
from .models import User, Team, ContractorFinancialInfo
from .models import User, Team, UserFinancialInfo
from archilance import util
from archilance.mixins import BaseMixin
from projects.forms import PortfolioForm
@ -25,7 +25,7 @@ from work_sell.forms import WorkSellForm
from .forms import (
ContractorFilterForm,
ContractorFinancicalInfoForm,
UserFinancicalInfoForm,
CustomerProfileProjectRealtyForm,
UserEditForm,
)
@ -260,12 +260,14 @@ class CustomerProfileOpenProjectsView(BaseMixin, View):
customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
form = self.form_class(request.GET, request=request, customer=customer)
projects = customer.projects.filter(state='active')
trashed_projects = customer.projects.filter(state='trashed')
if form.is_valid():
realty = form.cleaned_data.get('realty')
if realty:
projects = projects.filter(realty=realty)
trashed_projects = trashed_projects.filter(realty=realty)
else:
if form.errors:
messages.info(request, (
@ -290,7 +292,7 @@ class CustomerProfileOpenProjectsView(BaseMixin, View):
'customer': customer,
'open_project_count': projects.paginator.count,
'trashed_project_count': customer.projects.filter(state='trashed').count(),
'trashed_project_count': trashed_projects.count(),
'is_paginated': True,
'page_obj': projects,
@ -308,12 +310,14 @@ class CustomerProfileTrashedProjectsView(BaseMixin, View):
customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
form = self.form_class(request.GET, request=request, customer=customer)
projects = customer.projects.filter(state='trashed')
open_projects = customer.projects.filter(state='active')
if form.is_valid():
realty = form.cleaned_data.get('realty')
if realty:
projects = projects.filter(realty=realty)
open_projects = open_projects.filter(realty=realty)
else:
if form.errors:
messages.info(request, (
@ -337,7 +341,7 @@ class CustomerProfileTrashedProjectsView(BaseMixin, View):
'projects': projects,
'customer': customer,
'open_project_count': customer.projects.filter(state='active').count(),
'open_project_count': open_projects.count(),
'trashed_project_count': projects.paginator.count,
'is_paginated': True,
@ -372,14 +376,34 @@ class CustomerProfileReviewsView(BaseMixin, View):
return render(request, self.template_name, context)
class CustomerProfileEditView(CheckForUserMixin, View):
class ContractorProfileEditView(CheckForUserMixin, View):
form_class = UserEditForm
template_name = 'customer_profile_edit.html'
template_name = 'contractor_profile_edit.html'
def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance)
nodes = Specialization.objects.all()
root = util.get_or_none(Specialization, name='_root')
nodes = root.get_descendants('lft')
return render(request, self.template_name, {'form': form, 'nodes': nodes})
def post(self, request, *args, **kwargs):
@ -387,22 +411,31 @@ class CustomerProfileEditView(CheckForUserMixin, View):
form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid():
# import code; code.interact(local=dict(globals(), **locals()))
form.save()
messages.info(request, 'Отправили post запрос')
return redirect(reverse('users:customer-profile-open-projects', kwargs={'pk': request.user.pk}))
instance = form.save(commit=False)
instance.save()
messages.info(request, 'Данные успешно отредактированы')
return redirect(reverse('users:contractor-edit', kwargs={'pk': request.user.pk}))
return render(request, self.template_name, {'form': form})
class ContractorProfileEditView(CheckForUserMixin, View):
class CustomerProfileEditView(CheckForUserMixin, View):
form_class = UserEditForm
template_name = 'contractor_profile_edit.html'
template_name = 'customer_profile_edit.html'
def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance)
root = util.get_or_none(Specialization, name='_root')
nodes = root.get_descendants('lft')
nodes = Specialization.objects.all()
return render(request, self.template_name, {'form': form, 'nodes': nodes})
def post(self, request, *args, **kwargs):
@ -410,17 +443,36 @@ class ContractorProfileEditView(CheckForUserMixin, View):
form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid():
# import code; code.interact(local=dict(globals(), **locals()))
instance = form.save(commit=False)
instance.save()
messages.info(request, 'Данные успешно отредактированы')
return redirect(reverse('users:contractor-edit', kwargs={'pk': request.user.pk}))
form.save()
messages.info(request, 'Отправили post запрос')
return redirect(reverse('users:customer-profile-open-projects', kwargs={'pk': request.user.pk}))
return render(request, self.template_name, {'form': form})
class ContractorFinancialInfoEdit(CheckForUserMixin, View):
class UserFinancialInfoEditView(CheckForUserMixin, View):
template_name = 'contractor_financical_info_edit.html'
form_class = ContractorFinancicalInfoForm
form_class = UserFinancicalInfoForm
def get(self, request, *args, **kwargs):
instance = request.user.contractor_financial_info

Loading…
Cancel
Save