feat: Добавлена функциональность управления заказами и улучшен поиск товаров

Заказы:
- Добавлены миграции для исторических записей с полями оплаты и получателя
- Расширен admin для заказов с инлайнами товаров/комплектов
- Реализованы представления списка, создания, редактирования и удаления заказов
- Добавлен шаблон подтверждения удаления заказа
- Настроены URL-маршруты для работы с заказами

Клиенты:
- Добавлена миграция с новыми полями адресов и подтверждений
- Обновлена модель клиентов с дополнительными полями
- Улучшен admin для работы с клиентами

Товары:
- Значительно улучшен API поиска товаров с поддержкой фильтрации
- Добавлен Select2 виджет для динамического поиска товаров
- Создан статический JS файл для интеграции Select2
- Оптимизирована обработка запросов и ответов API

Прочее:
- Добавлены новые настройки в settings.py
- Обновлена навигация в navbar.html
- Обновлены URL-маршруты проекта

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-07 16:10:19 +03:00
parent a1dfb6a257
commit ec0557c8cf
15 changed files with 974 additions and 70 deletions

View File

@@ -78,13 +78,16 @@ class AddressAdmin(admin.ModelAdmin):
"""Административный интерфейс для управления адресами доставки"""
list_display = (
'recipient_name',
'recipient_phone',
'full_address',
'customer',
'district',
'confirm_address_with_recipient',
'is_default'
)
list_filter = (
'is_default',
'confirm_address_with_recipient',
'district',
'created_at'
)
@@ -100,13 +103,13 @@ class AddressAdmin(admin.ModelAdmin):
fieldsets = (
('Информация о получателе', {
'fields': ('customer', 'recipient_name')
'fields': ('customer', 'recipient_name', 'recipient_phone')
}),
('Адрес доставки', {
'fields': ('street', 'building_number', 'apartment_number', 'district')
}),
('Дополнительная информация', {
'fields': ('delivery_instructions',),
'fields': ('delivery_instructions', 'confirm_address_with_recipient'),
'classes': ('collapse',)
}),
('Статус', {

View File

@@ -0,0 +1,24 @@
# Generated by Django 5.0.10 on 2025-11-06 20:54
import phonenumber_field.modelfields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('customers', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='address',
name='confirm_address_with_recipient',
field=models.BooleanField(default=False, help_text='Курьер должен уточнить адрес у получателя перед доставкой', verbose_name='Уточнить адрес у получателя'),
),
migrations.AddField(
model_name='address',
name='recipient_phone',
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, help_text='Контактный телефон получателя для уточнения адреса', max_length=128, null=True, region=None, verbose_name='Телефон получателя'),
),
]

View File

@@ -213,7 +213,14 @@ class Address(models.Model):
verbose_name="Имя получателя",
help_text="Имя человека, которому будет доставлен заказ"
)
recipient_phone = PhoneNumberField(
blank=True,
null=True,
verbose_name="Телефон получателя",
help_text="Контактный телефон получателя для уточнения адреса"
)
street = models.CharField(
max_length=255,
verbose_name="Улица"
@@ -246,7 +253,13 @@ class Address(models.Model):
verbose_name="Инструкции для доставки",
help_text="Дополнительные инструкции для курьера (домофон, подъезд и т.д.)"
)
confirm_address_with_recipient = models.BooleanField(
default=False,
verbose_name="Уточнить адрес у получателя",
help_text="Курьер должен уточнить адрес у получателя перед доставкой"
)
is_default = models.BooleanField(
default=False,
verbose_name="Адрес по умолчанию",