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