Исправлена ошибка public admin для мультитенантной архитектуры
Проблема: при входе в localhost/admin/ (public схема) возникала ошибка "relation user_roles_userrole does not exist", так как tenant-only таблицы не существуют в public схеме. Решение: - Создан TenantAdminOnlyMixin для скрытия tenant-only моделей от public admin - Применён миксин ко всем ModelAdmin классам в tenant-only приложениях: user_roles, customers, orders, inventory, products - Добавлена проверка _is_public_schema() в RoleBasedPermissionBackend для предотвращения запросов к tenant-only таблицам в public схеме Теперь: - localhost/admin/ показывает только public модели (Client, Domain, User) - shop.localhost/admin/ показывает все модели магазина 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@ from django.contrib import admin
|
||||
from django.db import models
|
||||
from django.utils.html import format_html
|
||||
from .models import Customer, WalletTransaction, ContactChannel
|
||||
from tenants.admin_mixins import TenantAdminOnlyMixin
|
||||
|
||||
|
||||
class IsSystemCustomerFilter(admin.SimpleListFilter):
|
||||
@@ -23,8 +24,11 @@ class IsSystemCustomerFilter(admin.SimpleListFilter):
|
||||
|
||||
|
||||
@admin.register(Customer)
|
||||
class CustomerAdmin(admin.ModelAdmin):
|
||||
"""Административный интерфейс для управления клиентами цветочного магазина"""
|
||||
class CustomerAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Административный интерфейс для управления клиентами цветочного магазина.
|
||||
TenantAdminOnlyMixin - скрывает от public admin (таблица только в tenant схемах).
|
||||
"""
|
||||
list_display = (
|
||||
'full_name',
|
||||
'email',
|
||||
@@ -124,8 +128,11 @@ CustomerAdmin.inlines = [ContactChannelInline, WalletTransactionInline]
|
||||
|
||||
|
||||
@admin.register(WalletTransaction)
|
||||
class WalletTransactionAdmin(admin.ModelAdmin):
|
||||
"""Админка для просмотра всех транзакций кошелька"""
|
||||
class WalletTransactionAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Админка для просмотра всех транзакций кошелька.
|
||||
TenantAdminOnlyMixin - скрывает от public admin.
|
||||
"""
|
||||
list_display = ('created_at', 'customer', 'transaction_type', 'amount_display', 'balance_after', 'order', 'created_by')
|
||||
list_filter = ('transaction_type', 'balance_category', 'created_at')
|
||||
search_fields = ('customer__name', 'customer__email', 'customer__phone', 'description')
|
||||
|
||||
Reference in New Issue
Block a user