Files
octopus/add_payment_methods_to_buba.py
Andrey Smakotin 7188b11f65 Единый источник истины для способов оплаты
Проблема #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 - скрипт для существующих тенантов
2025-12-01 01:22:40 +03:00

41 lines
1.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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)