Files
octopus/myproject/orders/models/address.py
Andrey Smakotin 6669d47cdf feat(orders): add recipient management and enhance order forms
- Introduced Recipient model to manage order recipients separately from customers.
- Updated Order model to link to Recipient, replacing recipient_name and recipient_phone fields.
- Enhanced OrderForm to include recipient selection modes: customer, history, and new.
- Added AJAX endpoint to fetch recipient history for customers.
- Updated admin interface to manage recipients and display recipient information in order details.
- Refactored address handling to accommodate new recipient logic.
- Improved demo order creation to include random recipients.
2025-12-23 00:08:41 +03:00

121 lines
3.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django.db import models
class Address(models.Model):
"""
Модель адреса доставки.
Адрес может использоваться в разных заказах и для разных получателей.
"""
street = models.CharField(
max_length=255,
blank=True,
null=True,
verbose_name="Улица"
)
building_number = models.CharField(
max_length=20,
blank=True,
null=True,
verbose_name="Номер здания"
)
apartment_number = models.CharField(
max_length=20,
blank=True,
null=True,
verbose_name="Номер квартиры/офиса"
)
entrance = models.CharField(
max_length=20,
blank=True,
null=True,
verbose_name="Подъезд",
help_text="Номер подъезда/входа"
)
floor = models.CharField(
max_length=20,
blank=True,
null=True,
verbose_name="Этаж"
)
intercom_code = models.CharField(
max_length=100,
blank=True,
null=True,
verbose_name="Код домофона",
help_text="Код домофона для входа в здание"
)
# Дополнительная информация для доставки
delivery_instructions = models.TextField(
blank=True,
null=True,
verbose_name="Инструкции для доставки",
help_text="Дополнительные инструкции для курьера"
)
confirm_address_with_recipient = models.BooleanField(
default=False,
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=['created_at']),
]
ordering = ['-created_at']
def __str__(self):
# Собираем компоненты адреса
address_parts = []
if self.street:
address_parts.append(self.street)
if self.building_number:
address_parts.append(self.building_number)
if self.apartment_number:
address_parts.append(f"кв/офис {self.apartment_number}")
return ", ".join(address_parts) if address_parts else "Адрес не указан"
@property
def full_address(self):
"""Полный адрес для доставки"""
# Собираем основные компоненты адреса
address_parts = []
if self.street:
address_parts.append(self.street)
if self.building_number:
address_parts.append(self.building_number)
# Если нет основных данных, возвращаем сообщение
if not address_parts:
return "Адрес не указан"
address = ", ".join(address_parts)
# Добавляем квартиру/офис
if self.apartment_number:
address += f", кв/офис {self.apartment_number}"
# Собираем дополнительные детали
details = []
if self.entrance:
details.append(f"подъезд {self.entrance}")
if self.floor:
details.append(f"этаж {self.floor}")
if details:
address += f" ({', '.join(details)})"
return address