Проблема #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 - скрипт для существующих тенантов
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
#!/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)
|