Исправление доступа к полям доставки после рефакторинга
- Добавлены свойства обратной совместимости в модель Order для доступа к полям доставки через связь delivery
- Исправлены фильтры по delivery_date в модели Customer (get_successful_orders_total)
- Исправлены фильтры в orders/filters.py для работы с delivery__delivery_date
- Добавлен select_related('delivery') в customer_detail view для оптимизации запросов
Исправляет ошибку FieldError: Cannot resolve keyword 'delivery_date' into field
This commit is contained in:
@@ -257,3 +257,70 @@ class Order(models.Model):
|
||||
if hasattr(self, 'delivery'):
|
||||
self.delivery.cost = 0
|
||||
self.delivery.save(update_fields=['cost'])
|
||||
|
||||
# === Свойства обратной совместимости для доступа к полям доставки ===
|
||||
# Эти свойства обеспечивают доступ к полям Delivery через Order для обратной совместимости
|
||||
# после рефакторинга, когда поля доставки были перенесены в отдельную модель Delivery
|
||||
|
||||
@property
|
||||
def delivery_date(self):
|
||||
"""Дата доставки (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
return self.delivery.delivery_date
|
||||
return None
|
||||
|
||||
@property
|
||||
def delivery_time_start(self):
|
||||
"""Время начала доставки (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
return self.delivery.time_from
|
||||
return None
|
||||
|
||||
@property
|
||||
def delivery_time_end(self):
|
||||
"""Время окончания доставки (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
return self.delivery.time_to
|
||||
return None
|
||||
|
||||
@property
|
||||
def delivery_time_window(self):
|
||||
"""Форматированное окно времени доставки (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
if self.delivery.time_from and self.delivery.time_to:
|
||||
return f"{self.delivery.time_from.strftime('%H:%M')} - {self.delivery.time_to.strftime('%H:%M')}"
|
||||
return None
|
||||
|
||||
@property
|
||||
def delivery_time(self):
|
||||
"""Время доставки (обратная совместимость, использует delivery_time_window)"""
|
||||
return self.delivery_time_window
|
||||
|
||||
@property
|
||||
def is_delivery(self):
|
||||
"""Является ли заказ доставкой (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
from .delivery import Delivery
|
||||
return self.delivery.delivery_type == Delivery.DELIVERY_TYPE_COURIER
|
||||
return False
|
||||
|
||||
@property
|
||||
def delivery_address(self):
|
||||
"""Адрес доставки (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
return self.delivery.address
|
||||
return None
|
||||
|
||||
@property
|
||||
def delivery_cost(self):
|
||||
"""Стоимость доставки (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
return self.delivery.cost
|
||||
return 0
|
||||
|
||||
@property
|
||||
def pickup_warehouse(self):
|
||||
"""Склад самовывоза (обратная совместимость)"""
|
||||
if hasattr(self, 'delivery') and self.delivery:
|
||||
return self.delivery.pickup_warehouse
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user