Add order creation form
This commit is contained in:
parent
7b19ac39c1
commit
659de0b0ee
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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="Владелец")
|
||||
|
||||
|
@ -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})
|
||||
|
@ -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 %}
|
||||
|
@ -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 %}
|
||||
|
Reference in New Issue
Block a user