Рефакторинг: отделение Delivery от Order, обязательные поля доставки, исправление доменов

- Отделена модель Delivery от Order (OneToOne связь)
- Добавлены обязательные поля delivery_date, time_from, time_to в Delivery
- Delivery обязательна при создании заказа (кроме черновиков)
- Добавлены методы calculate_total() и reset_delivery_cost() в Order
- Добавлена валидация полей доставки в OrderForm
- Исправлено создание доменов - убран порт из домена в БД
- Исправлен редирект после установки пароля (правильный формат URL)
- Исправлена ошибка NoReverseMatch в navbar для public схемы
- Удалены все старые миграции (база создается с нуля)
- Обновлены views для работы с новой моделью Delivery
This commit is contained in:
2025-12-23 23:52:59 +03:00
parent d29c736252
commit 94fe363cb1
61 changed files with 1342 additions and 2189 deletions

View File

@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from django.contrib import admin
from django.utils.html import format_html
from .models import Order, OrderItem, Transaction, PaymentMethod, Address, OrderStatus, Recipient
from .models import Order, OrderItem, Transaction, PaymentMethod, Address, OrderStatus, Recipient, Delivery
class TransactionInline(admin.TabularInline):
@@ -31,6 +31,18 @@ class OrderItemInline(admin.TabularInline):
return []
class DeliveryInline(admin.StackedInline):
"""
Inline для управления доставкой заказа.
"""
model = Delivery
extra = 0
max_num = 1
fields = ['delivery_type', 'address', 'pickup_warehouse', 'cost']
verbose_name = 'Доставка'
verbose_name_plural = 'Доставка'
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
"""
@@ -39,8 +51,6 @@ class OrderAdmin(admin.ModelAdmin):
list_display = [
'order_number',
'customer',
'is_delivery',
'delivery_date',
'status',
'total_amount',
'payment_status',
@@ -50,9 +60,7 @@ class OrderAdmin(admin.ModelAdmin):
list_filter = [
'status',
'is_delivery',
'payment_status',
'delivery_date',
'created_at',
]
@@ -62,15 +70,12 @@ class OrderAdmin(admin.ModelAdmin):
'customer__phone',
'customer__email',
'recipient__name',
'delivery_address__street',
]
readonly_fields = [
'order_number',
'created_at',
'updated_at',
'delivery_info',
'delivery_time_window',
'amount_due',
'payment_status',
]
@@ -79,18 +84,10 @@ class OrderAdmin(admin.ModelAdmin):
('Основная информация', {
'fields': ('order_number', 'customer', 'status')
}),
('Доставка', {
('Получатель', {
'fields': (
'is_delivery',
'customer_is_recipient',
'delivery_address',
'pickup_warehouse',
'delivery_date',
'delivery_time_start',
'delivery_time_end',
'delivery_cost',
'delivery_info',
'delivery_time_window',
'recipient',
)
}),
('Оплата', {
@@ -111,7 +108,7 @@ class OrderAdmin(admin.ModelAdmin):
}),
)
inlines = [OrderItemInline, TransactionInline]
inlines = [OrderItemInline, DeliveryInline, TransactionInline]
actions = [
'mark_as_confirmed',