Единый источник истины для способов оплаты
Проблема #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:
40
add_payment_methods_to_buba.py
Normal file
40
add_payment_methods_to_buba.py
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Скрипт для добавления способов оплаты в тенант buba
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import django
|
||||
|
||||
# Добавляем путь к проекту
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'myproject'))
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
|
||||
django.setup()
|
||||
|
||||
from django_tenants.utils import schema_context
|
||||
from django.core.management import call_command
|
||||
|
||||
print("=" * 70)
|
||||
print("Добавление способов оплаты в тенант 'buba'")
|
||||
print("=" * 70)
|
||||
|
||||
# Переключаемся на схему buba и создаём способы оплаты
|
||||
with schema_context('buba'):
|
||||
print("\n1. Создание способов оплаты...")
|
||||
call_command('create_payment_methods')
|
||||
|
||||
# Проверяем что создалось
|
||||
from orders.models import PaymentMethod
|
||||
methods = PaymentMethod.objects.all().order_by('order')
|
||||
|
||||
print(f"\n2. Проверка созданных способов оплаты:")
|
||||
print(f" Всего: {methods.count()}")
|
||||
for method in methods:
|
||||
status = "✓" if method.is_active else "✗"
|
||||
print(f" {status} [{method.order}] {method.name} ({method.code})")
|
||||
|
||||
print("\n" + "=" * 70)
|
||||
print("✓ Готово!")
|
||||
print("=" * 70)
|
||||
Reference in New Issue
Block a user