Create basic order creation form

This commit is contained in:
2022-09-28 02:34:41 +03:00
parent 8bcc88680b
commit fcf44c9bac
5 changed files with 226 additions and 67 deletions

View File

@@ -9,5 +9,5 @@ class CityAdmin(admin.ModelAdmin):
@admin.register(Order)
class CityAdmin(admin.ModelAdmin):
class OrderAdmin(admin.ModelAdmin):
pass

View File

@@ -1,52 +1,29 @@
from django import forms
from django.core.validators import RegexValidator
from .models import *
class BaseOrderCreationForm(forms.Form):
name = forms.CharField(max_length=200, label="Название заказа", help_text='help text')
description = forms.CharField(widget=forms.Textarea, label="Описание", required=False)
class BaseOrderCreationForm(forms.ModelForm):
square = forms.DecimalField(max_digits=7, decimal_places=2, required=True, label="Площадь в м²")
type_of_room = forms.ChoiceField(choices=Order.TYPE_OF_ROOM_CHOICES, required=False, label="Тип квартиры",
widget=forms.RadioSelect(attrs={"class": "inline-input"}))
is_require_design = forms.ChoiceField(choices=Order.REQUIRED_DESIGN_CHOICES, label="Требуется дизайн проект",
required=False, widget=forms.RadioSelect(attrs={"class": "inline-input"}))
purchase_of_material = forms.ChoiceField(choices=Order.PURCHASE_OF_MATERIAL_CHOICES, widget=forms.RadioSelect,
required=False, label="Закуп материала")
type_of_executor = forms.ChoiceField(choices=Order.TYPE_OF_EXECUTOR_CHOICES, widget=forms.RadioSelect,
required=False, label="Тип исполнителя")
type_of_renovation = forms.ChoiceField(choices=Order.TYPE_OF_RENOVATION_CHOICES, required=False,
label="Тип ремонта")
type_of_house = forms.ChoiceField(choices=Order.TYPE_OF_HOUSE_CHOICES, required=False, label="Тип дома")
type_of_room = forms.ChoiceField(choices=Order.TYPE_OF_ROOM_CHOICES, required=False,
label="Тип квартиры", widget=forms.RadioSelect)
# требуется дизайн проект
is_require_design = forms.ChoiceField(choices=Order.REQUIRED_DESIGN_CHOICES, required=False,
label="", widget=forms.RadioSelect)
purchase_of_material = forms.ChoiceField(choices=Order.PURCHASE_OF_MATERIAL_CHOICES, required=False,
label="Закуп материала", widget=forms.RadioSelect)
type_of_executor = forms.ChoiceField(choices=Order.TYPE_OF_EXECUTOR_CHOICES, required=False,
label="Тип исполнителя", widget=forms.RadioSelect)
# дальше отдельные параметры
is_with_warranty = forms.BooleanField(label="С гарантией", initial=True, required=False)
is_with_contract = forms.BooleanField(label="Работа по договору", initial=False, required=False)
# is_with_warranty = models.BooleanField(default=True, verbose_name="С гарантией")
# is_with_contract = models.BooleanField(default=False, verbose_name="Работа по договору")
# is_with_trade = models.BooleanField(default=False, verbose_name="Возможен торг")
# is_with_cleaning = models.BooleanField(default=False, verbose_name="С уборкой")
# is_with_garbage_removal = models.BooleanField(default=False, verbose_name="С вывозом мусора")
# примерная цена
approximate_price = forms.DecimalField(max_digits=12, decimal_places=2)
work_time = forms.CharField(max_length=100, required=False)
address_city = forms.ChoiceField(choices=City.to_choices, label="Город",
help_text="если вашего города нет в списке, "
"значит сервис пока что там не работает")
address_text = forms.CharField(max_length=70, label="Улица, дом", help_text="квартиру можно не указывать")
class Meta:
model = Order
fields = [
'name', 'description', 'square',
'type_of_renovation', 'type_of_house', 'type_of_room',
'is_require_design', 'purchase_of_material', 'type_of_executor',
'is_with_warranty', 'is_with_contract', 'is_with_trade', 'is_with_cleaning', 'is_with_garbage_removal',
'date_start', 'date_end',
'approximate_price', 'work_time', 'address_city', 'address_text',
]
class UnregisteredUserOrderCreationForm(BaseOrderCreationForm):

View File

@@ -1,10 +1,13 @@
from django.core.validators import RegexValidator
from django.db import models
from account.models import SiteUser
class City(models.Model):
code = models.CharField(primary_key=True, max_length=20, verbose_name="Код города")
code = models.CharField(primary_key=True, max_length=20, verbose_name="Код города", validators=[
RegexValidator(regex="^[0-9a-zA-Z_]*$"),
])
name = models.CharField(unique=True, max_length=50, verbose_name="Название города")
def __str__(self):
@@ -17,13 +20,13 @@ class City(models.Model):
class Order(models.Model):
# основные поля: название и описание
name = models.CharField(max_length=200)
description = models.TextField(blank=True)
name = models.CharField(max_length=200, verbose_name="Название заказа")
description = models.TextField(blank=True, verbose_name="Описание")
# площадь в квадратных метрах
square = models.DecimalField(max_digits=5, decimal_places=2, blank=False)
square = models.DecimalField(max_digits=7, decimal_places=2, blank=False, verbose_name="Площадь в м²")
work_time = models.CharField(max_length=100, blank=True)
work_time = models.CharField(max_length=100, blank=True, verbose_name="Рабочее время")
# дальше вид дома, тип ремонта, тип квартиры, требуется дизайн проект, закуп материала, тип исполнителя
@@ -37,14 +40,14 @@ class Order(models.Model):
TYPE_OF_RENOVATION_DESIGN = 'design'
TYPE_OF_RENOVATION_CHOICES = [
(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, default=CHOICE_UNDEFINED)
type_of_renovation = models.CharField(max_length=10, choices=TYPE_OF_RENOVATION_CHOICES, default=CHOICE_UNDEFINED,
blank=True, verbose_name="Тип ремонта")
# тип дома
TYPE_OF_HOUSE_BLOCK = 'block'
@@ -53,50 +56,51 @@ 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)
type_of_house = models.CharField(max_length=10, choices=TYPE_OF_HOUSE_CHOICES, blank=True, default=CHOICE_UNDEFINED,
verbose_name="Тип дома")
# тип квартиры
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)
type_of_room = models.CharField(max_length=10, choices=TYPE_OF_ROOM_CHOICES, blank=True, default=CHOICE_UNDEFINED,
verbose_name="Тип квартиры")
# требуется дизайн проект
REQUIRED_DESIGN_CHOICES = ((None, 'Не указано'), (True, 'Да'), (False, 'Нет'))
is_require_design = models.BooleanField(default=None, blank=True, null=True, choices=REQUIRED_DESIGN_CHOICES)
REQUIRED_DESIGN_CHOICES = ((True, 'Да'), (False, 'Нет'))
is_require_design = models.BooleanField(default=None, blank=True, null=True, choices=REQUIRED_DESIGN_CHOICES,
verbose_name="Требуется дизайн проект")
# закуп материала
PURCHASE_OF_MATERIAL_EXECUTOR = 'executor'
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)
purchase_of_material = models.CharField(max_length=10, choices=PURCHASE_OF_MATERIAL_CHOICES,
blank=True, default=CHOICE_UNDEFINED, verbose_name="Закуп материала")
# тип исполнителя
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_EXECUTOR_CHOICES)
type_of_executor = models.CharField(max_length=10, choices=TYPE_OF_EXECUTOR_CHOICES,
blank=True, default=CHOICE_UNDEFINED, verbose_name="Тип исполнителя")
# дальше отдельные параметры
is_with_warranty = models.BooleanField(default=True, verbose_name="С гарантией")
@@ -106,9 +110,13 @@ 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, verbose_name="Цена")
approximate_price = models.DecimalField(max_digits=12, decimal_places=2, blank=False, verbose_name="Цена")
# address_city = models.ForeignKey(City, on_delete=models.CASCADE, blank=False, related_name="address_city")
date_start = models.DateField(blank=True, default=None, verbose_name="Дата начала")
date_end = models.DateField(blank=True, default=None, verbose_name="Дата окончания")
address_city = models.ForeignKey(City, on_delete=models.CASCADE, blank=False, related_name="address_city",
verbose_name="Город")
address_text = models.CharField(max_length=70, blank=True, verbose_name="Улица, дом")
owner = models.ForeignKey(SiteUser, on_delete=models.CASCADE, null=True, related_name="owner",

View File

@@ -22,5 +22,5 @@ def order_create(request):
return HttpResponseRedirect('/account')
else:
form = UnregisteredUserOrderCreationForm()
print(form.visible_fields)
return render(request, 'orders/order-create.html', {'form': form})