Требуется помощь в работе с несколькими арендаторами Django

В настоящее время я создаю saas приложение, используя django_multitenant пакет и я прочитал и следовал всем деталям, данным в документации и при использовании панели администратора Django все в порядке. Если мы создаем любой объект из панели, то объект автоматически получает назначенного ему арендатора, но при использовании API он продолжает спрашивать идентификатор арендатора, как это решить.

# setting 
MIDDLEWARE = [
    "corsheaders.middleware.CorsMiddleware",
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    "apps.api_auth.middlewares.MultitenantMiddleware",
    # 'django_multitenant.middlewares.MultitenantMiddleware',
]

# custom middleware
class MultitenantMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        jwt_auth = JWTAuthentication()
        # Authenticate the user
        auth_result = jwt_auth.authenticate(request)

        if auth_result is not None:
            user, _ = auth_result
            if user and not user.is_anonymous:
                tenant = Institute.objects.filter(user=user).first()
                set_current_tenant(tenant)
        response = self.get_response(request)
        unset_current_tenant()
        return response

# models
class Institute(TenantModel):
    name = models.CharField(max_length=100)

    class TenantMeta:
        tenant_field_name = "id"


class CustomUserManager(TenantManagerMixin, UserManager):
    pass


class User(TenantModel, AbstractUser):
    institute = TenantForeignKey(
        "tenant.institute", on_delete=models.CASCADE, blank=True, null=True
    )

    objects = CustomUserManager()

    class TenantMeta:
        tenant_field_name = "institute_id"


class SessionYear(TenantModel):
    start_year = models.DateField()
    end_year = models.DateField()
    is_deleted = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)
    institute = TenantForeignKey("tenant.institute", on_delete=models.CASCADE)

    class TenantMeta:
        tenant_field_name = "institute_id"

# API view
from django_multitenant import views
from rest_framework import viewsets, permissions

from apps.tenant import tenant_func
from apps.tenant.models.institute import Institute

from ..models import SessionYear
from ..serializers.session_year import AdminSessionYearSerializer
from django_multitenant.utils import get_current_tenant

views.get_tenant = tenant_func.tenant_func


class SessionYearViewSet(views.TenantModelViewSet):
    model_class = SessionYear
    serializer_class = AdminSessionYearSerializer
    permission_classes = [permissions.IsAuthenticated]

#Serializer
from rest_framework import serializers

from ..models import SessionYear


class AdminSessionYearSerializer(serializers.ModelSerializer):
    class Meta:
        model = SessionYear
        fields = "__all__"


# postman
# POST
{
    "institute": [
        "This field is required."
    ]
}

При взаимодействии с конечными точками API система постоянно запрашивает ID арендатора, в отличие от панели администрирования Django, где назначение арендатора происходит автоматически. Я ожидал, что API будет обрабатывать назначение арендаторов аналогично панели администратора, не требуя явных идентификаторов арендаторов для каждого запроса.

Вернуться на верх