Единый источник истины для способов оплаты
Проблема #1: Дублирование кода способов оплаты - В tenants/admin.py был полный список способов оплаты (45 строк) - В orders/management/commands/create_payment_methods.py был другой список - При создании тенанта отсутствовал способ 'account_balance' - Нарушение DRY принципа Решение: Single Source of Truth - Единственный источник истины: команда create_payment_methods - В tenants/admin.py заменено дублирование на call_command() - Удалено 45 строк дублирующего кода - Теперь все тенанты получают одинаковый полный список Проблема #2: AttributeError в админке PaymentMethod - obj.payments.count() вызывал ошибку - В модели Transaction связь называется 'transactions', а не 'payments' Решение: Исправлено в orders/admin.py - obj.payments → obj.transactions (2 места) - Админка PaymentMethod теперь работает корректно Для тенанта buba: - Создан скрипт add_payment_methods_to_buba.py - Добавлен недостающий способ оплаты 'С баланса счёта' Изменённые файлы: - myproject/tenants/admin.py - вызов команды вместо дублирования - myproject/orders/admin.py - исправлено на transactions - add_payment_methods_to_buba.py - скрипт для существующих тенантов
This commit is contained in:
@@ -441,7 +441,7 @@ class PaymentMethodAdmin(admin.ModelAdmin):
|
||||
|
||||
def payments_count(self, obj):
|
||||
"""Количество платежей этим способом"""
|
||||
count = obj.payments.count()
|
||||
count = obj.transactions.count()
|
||||
if count == 0:
|
||||
return format_html('<span style="color: #999;">{}</span>', count)
|
||||
return format_html('<span style="font-weight: bold;">{}</span>', count)
|
||||
@@ -450,7 +450,7 @@ class PaymentMethodAdmin(admin.ModelAdmin):
|
||||
def has_delete_permission(self, request, obj=None):
|
||||
"""Запрещаем удаление используемых способов оплаты"""
|
||||
if obj:
|
||||
# Разрешаем удаление только если нет связанных платежей
|
||||
if obj.payments.exists():
|
||||
# Разрешаем удаление только если нет связанных транзакций
|
||||
if obj.transactions.exists():
|
||||
return False
|
||||
return super().has_delete_permission(request, obj)
|
||||
|
||||
Reference in New Issue
Block a user