Исправлена ошибка 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:
@@ -1,7 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Админка для приложения orders.
|
||||
Все модели tenant-only, поэтому используют TenantAdminOnlyMixin
|
||||
для скрытия от public admin (localhost/admin/).
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.utils.html import format_html
|
||||
from .models import Order, OrderItem, Transaction, PaymentMethod, Address, OrderStatus, Recipient, Delivery
|
||||
from tenants.admin_mixins import TenantAdminOnlyMixin
|
||||
|
||||
|
||||
class TransactionInline(admin.TabularInline):
|
||||
@@ -44,10 +50,8 @@ class DeliveryInline(admin.StackedInline):
|
||||
|
||||
|
||||
@admin.register(Order)
|
||||
class OrderAdmin(admin.ModelAdmin):
|
||||
"""
|
||||
Админ-панель для управления заказами.
|
||||
"""
|
||||
class OrderAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""Админ-панель для управления заказами."""
|
||||
list_display = [
|
||||
'order_number',
|
||||
'customer',
|
||||
@@ -150,7 +154,7 @@ class OrderAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Transaction)
|
||||
class TransactionAdmin(admin.ModelAdmin):
|
||||
class TransactionAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Админ-панель для управления транзакциями.
|
||||
"""
|
||||
@@ -189,7 +193,7 @@ class TransactionAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(OrderItem)
|
||||
class OrderItemAdmin(admin.ModelAdmin):
|
||||
class OrderItemAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Админ-панель для управления позициями заказов.
|
||||
"""
|
||||
@@ -232,7 +236,7 @@ class OrderItemAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Address)
|
||||
class AddressAdmin(admin.ModelAdmin):
|
||||
class AddressAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Админ-панель для управления адресами доставки заказов.
|
||||
"""
|
||||
@@ -276,7 +280,7 @@ class AddressAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Recipient)
|
||||
class RecipientAdmin(admin.ModelAdmin):
|
||||
class RecipientAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Админ-панель для управления получателями заказов.
|
||||
"""
|
||||
@@ -309,7 +313,7 @@ class RecipientAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(OrderStatus)
|
||||
class OrderStatusAdmin(admin.ModelAdmin):
|
||||
class OrderStatusAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Админ-панель для управления статусами заказов.
|
||||
"""
|
||||
@@ -406,7 +410,7 @@ class OrderStatusAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(PaymentMethod)
|
||||
class PaymentMethodAdmin(admin.ModelAdmin):
|
||||
class PaymentMethodAdmin(TenantAdminOnlyMixin, admin.ModelAdmin):
|
||||
"""
|
||||
Админ-панель для управления способами оплаты.
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user