Add order creation form

This commit is contained in:
vlados31 2022-09-27 16:57:05 +03:00
parent 7b19ac39c1
commit 659de0b0ee
6 changed files with 79 additions and 41 deletions

View File

@ -156,17 +156,7 @@ class SiteAccountManager(BaseUserManager):
return user
def get_by_natural_key(self, phone_):
# Гоша попросил запилить фичу, чтобы принимались номера:
# +79991112233
# 79991112233
# 9991112233
if re.match("^[0-9]{10}$", phone_) is not None:
phone_ = f"+7{phone_}"
elif re.match("^7[0-9]{10}$", phone_) is not None:
phone_ = f"+{phone_}"
return self.get(phone=phone_)
return self.model.get_by_natural_key(phone_)
class SiteUser(AbstractBaseUser, PermissionsMixin):

View File

@ -1,3 +1,13 @@
from django.contrib import admin
from .models import *
# Register your models here.
@admin.register(City)
class CityAdmin(admin.ModelAdmin):
list_display = ['code', 'name']
ordering = ['name']
@admin.register(Order)
class CityAdmin(admin.ModelAdmin):
pass

View File

@ -1,8 +1,18 @@
from django.db import models
from account.models import SiteUser
class City(models.Model):
name = models.CharField(max_length=50)
code = models.CharField(primary_key=True, max_length=20, verbose_name="Код города")
name = models.CharField(unique=True, max_length=50, verbose_name="Название города")
def __str__(self):
return f"{self.name} ({self.code})"
@staticmethod
def to_choices():
return City.objects.order_by('name').values_list('code', 'name')
class Order(models.Model):
@ -17,8 +27,9 @@ class Order(models.Model):
# дальше вид дома, тип ремонта, тип квартиры, требуется дизайн проект, закуп материала, тип исполнителя
CHOICE_UNDEFINED = ''
# тип ремонта
TYPE_OF_RENOVATION_UNDEFINED = ''
TYPE_OF_RENOVATION_OVERHAUL = 'overhaul'
TYPE_OF_RENOVATION_PARTIAL = 'partial'
TYPE_OF_RENOVATION_REDECOR = 'redecor'
@ -26,15 +37,14 @@ class Order(models.Model):
TYPE_OF_RENOVATION_DESIGN = 'design'
TYPE_OF_RENOVATION_CHOICES = [
(TYPE_OF_RENOVATION_UNDEFINED, 'Не указан'),
(CHOICE_UNDEFINED, 'Не указан'),
(TYPE_OF_RENOVATION_OVERHAUL, 'Капитальный'),
(TYPE_OF_RENOVATION_PARTIAL, 'Частичный'),
(TYPE_OF_RENOVATION_REDECOR, 'Косметический'),
(TYPE_OF_RENOVATION_PREMIUM, 'Премиальный'),
(TYPE_OF_RENOVATION_DESIGN, 'Дизайнерский'),
]
type_of_renovation = models.CharField(max_length=10, choices=TYPE_OF_RENOVATION_CHOICES, blank=True,
default=TYPE_OF_RENOVATION_UNDEFINED)
type_of_renovation = models.CharField(max_length=10, choices=TYPE_OF_RENOVATION_CHOICES, default=CHOICE_UNDEFINED)
# тип дома
TYPE_OF_HOUSE_BLOCK = 'block'
@ -43,25 +53,27 @@ class Order(models.Model):
TYPE_OF_HOUSE_PANEL = 'panel'
TYPE_OF_HOUSE_CHOICES = [
(CHOICE_UNDEFINED, 'Не указан'),
(TYPE_OF_HOUSE_BLOCK, 'Блочный'),
(TYPE_OF_HOUSE_BRICK, 'Кирпичный'),
(TYPE_OF_HOUSE_MONOLITH, 'Монолит'),
(TYPE_OF_HOUSE_PANEL, 'Панельный'),
]
type_of_house = models.CharField(max_length=10, choices=TYPE_OF_HOUSE_CHOICES, blank=True)
type_of_house = models.CharField(max_length=10, choices=TYPE_OF_HOUSE_CHOICES)
# тип квартиры
TYPE_OF_ROOM_PRIMARY = 'primary'
TYPE_OF_ROOM_SECONDARY = 'secondary'
TYPE_OF_ROOM_CHOICES = [
(CHOICE_UNDEFINED, 'Не указан'),
(TYPE_OF_ROOM_PRIMARY, 'Первичка'),
(TYPE_OF_ROOM_SECONDARY, 'Вторичка')
]
type_of_room = models.CharField(max_length=10, choices=TYPE_OF_ROOM_CHOICES, blank=True)
type_of_room = models.CharField(max_length=10, choices=TYPE_OF_ROOM_CHOICES)
# требуется дизайн проект
REQUIRED_DESIGN_CHOICES = ((None, ''), (True, 'Да'), (False, 'Нет'))
REQUIRED_DESIGN_CHOICES = ((None, 'Не указано'), (True, 'Да'), (False, 'Нет'))
is_require_design = models.BooleanField(default=None, blank=True, null=True, choices=REQUIRED_DESIGN_CHOICES)
# закуп материала
@ -69,20 +81,22 @@ class Order(models.Model):
PURCHASE_OF_MATERIAL_CUSTOMER = 'customer'
PURCHASE_OF_MATERIAL_CHOICES = [
(CHOICE_UNDEFINED, 'Не указано'),
(PURCHASE_OF_MATERIAL_EXECUTOR, 'Исполнитель'),
(PURCHASE_OF_MATERIAL_CUSTOMER, 'Заказчик')
]
purchase_of_material = models.CharField(max_length=10, choices=PURCHASE_OF_MATERIAL_CHOICES, blank=True)
purchase_of_material = models.CharField(max_length=10, choices=PURCHASE_OF_MATERIAL_CHOICES)
# тип исполнителя
TYPE_OF_EXECUTOR_INDIVIDUAL = 'individual'
TYPE_OF_EXECUTOR_COMPANY = 'company'
TYPE_OF_EXECUTOR_CHOICES = [
(CHOICE_UNDEFINED, 'Не указан'),
(TYPE_OF_EXECUTOR_INDIVIDUAL, 'Самозанятый/бригада'),
(TYPE_OF_EXECUTOR_COMPANY, 'Компания')
]
type_of_executor = models.CharField(max_length=10, choices=TYPE_OF_ROOM_CHOICES, blank=True)
type_of_executor = models.CharField(max_length=10, choices=TYPE_OF_EXECUTOR_CHOICES)
# дальше отдельные параметры
is_with_warranty = models.BooleanField(default=True, verbose_name="С гарантией")
@ -92,7 +106,11 @@ class Order(models.Model):
is_with_garbage_removal = models.BooleanField(default=False, verbose_name="С вывозом мусора")
# примерная цена
approximate_price = models.DecimalField(max_digits=9, decimal_places=2, blank=False)
approximate_price = models.DecimalField(max_digits=9, decimal_places=2, blank=False, verbose_name="Цена")
# TODO нужно определится по поводу почты, телефона, адреса
# address_city = models.ForeignKey(City, on_delete=models.CASCADE, blank=False, related_name="address_city")
address_text = models.CharField(max_length=70, blank=True, verbose_name="Улица, дом")
owner = models.ForeignKey(SiteUser, on_delete=models.CASCADE, null=True, related_name="owner",
verbose_name="Владелец")

View File

@ -1,4 +1,6 @@
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import *
def orders_list(request):
@ -6,4 +8,19 @@ def orders_list(request):
def order_create(request):
return render(request, 'orders/order-create.html')
if request.user.is_authenticated:
if request.method == 'POST':
form = BaseOrderCreationForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('/account')
else:
form = BaseOrderCreationForm()
else:
if request.method == 'POST':
form = UnregisteredUserOrderCreationForm(request.POST)
if form.is_valid():
return HttpResponseRedirect('/account')
else:
form = UnregisteredUserOrderCreationForm()
return render(request, 'orders/order-create.html', {'form': form})

View File

@ -4,12 +4,15 @@
{% block content %}
<h1 class=deprecated-page-header"> Создать заказ </h1>
<h3>тут должна быть форма создания заказа</h3>
{% if user.is_authenticated %}
тут можно показать поля, которые нужны залогиненному юзеру
{% else %}
тут можно показать поля, которые нужны незалогиненному юзеру
{% endif %}
<h3>тут должна быть форма создания заказа, собсна вот она</h3>
<form action="{% url 'order-create' %}" method="POST">
{% csrf_token %}
<table>
<tbody>
{{ form.as_table }}
</tbody>
</table>
<button type="submit">Опубликовать</button>
</form>
{% endblock %}

View File

@ -12,13 +12,13 @@
{% block content %}
<h1 class=deprecated-page-header"> Ваш аккаунт </h1>
<h3>Вход</h3>
<form action="{% url 'login' %}" method="POST">
{% csrf_token %}
<table>
<tbody>
{{ form.as_table }}
</tbody>
</table>
<button type="submit">Войти</button>
</form>
<form action="{% url 'login' %}" method="POST">
{% csrf_token %}
<table>
<tbody>
{{ form.as_table }}
</tbody>
</table>
<button type="submit">Войти</button>
</form>
{% endblock %}