- Заменено поле phone с CharField на PhoneNumberField для автоматической нормализации телефонов - Убран регион BY, установлен region=None для универсальности (поддержка номеров разных стран) - Добавлено поле notes для дополнительной информации о получателе (мессенджеры, соцсети и т.д.) - Улучшена логика поиска существующих получателей: * Использование нормализованного телефона из PhoneNumberField * Регистронезависимый поиск по имени (name__iexact) * Обновление notes при нахождении существующего получателя - Обновлена форма OrderForm для работы с PhoneNumberField и новым полем notes - Обновлен шаблон order_form.html для отображения нового поля - Созданы миграции для изменений модели
51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
from django.db import models
|
||
from phonenumber_field.modelfields import PhoneNumberField
|
||
|
||
|
||
class Recipient(models.Model):
|
||
"""
|
||
Модель получателя заказа.
|
||
Один получатель может получать доставки по разным адресам.
|
||
"""
|
||
name = models.CharField(
|
||
max_length=200,
|
||
verbose_name="Имя получателя",
|
||
help_text="ФИО или название организации получателя"
|
||
)
|
||
|
||
phone = PhoneNumberField(
|
||
region=None,
|
||
verbose_name="Телефон получателя",
|
||
help_text="Контактный телефон для связи с получателем. Введите в любом формате, будет автоматически преобразован"
|
||
)
|
||
|
||
notes = models.CharField(
|
||
max_length=200,
|
||
blank=True,
|
||
null=True,
|
||
verbose_name="Дополнительная информация",
|
||
help_text="Мессенджер, соцсеть или другая информация о получателе (необязательно)"
|
||
)
|
||
|
||
# Временные метки
|
||
created_at = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
|
||
updated_at = models.DateTimeField(auto_now=True, verbose_name="Дата обновления")
|
||
|
||
class Meta:
|
||
verbose_name = "Получатель"
|
||
verbose_name_plural = "Получатели"
|
||
indexes = [
|
||
models.Index(fields=['phone']),
|
||
models.Index(fields=['name']),
|
||
models.Index(fields=['created_at']),
|
||
]
|
||
ordering = ['-created_at']
|
||
|
||
def __str__(self):
|
||
return f"{self.name} ({self.phone})"
|
||
|
||
@property
|
||
def display_name(self):
|
||
"""Форматированное имя для отображения"""
|
||
return f"Получатель{self.name} - {self.phone}"
|