Как справиться с демонтажем с помощью django-tenant?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как справиться с демонтажем с помощью django-tenant?

Сообщение Anonymous »

Я использую django-tenant, и у меня возникают проблемы при создании тестов.
Мне пришлось создать класс setup_tenant, чтобы выполнить демонтаж перед тестированием, потому что для доступа к столик в ресторане, мне пришлось создать арендатора выше по течению. Однако, когда мои тесты завершаются успешно, во время демонтажа я получаю сообщение об ошибке:

Код: Выделить всё

ERROR restaurants/tests.py::RestaurantTests::test_update_restaurant - django.db.utils.ProgrammingError: relation "restaurants_restaurant" does not exist
Это полная ошибка:

Код: Выделить всё

restaurants/tests.py::RestaurantTests::test_update_restaurant PASSED                                                                                                                                           [100%]
restaurants/tests.py::RestaurantTests::test_update_restaurant ERROR                                                                                                                                            [100%]

======================================================================================================= ERRORS =======================================================================================================
____________________________________________________________________________ ERROR at teardown of RestaurantTests.test_update_restaurant _____________________________________________________________________________

self = 
sql = 'SELECT "restaurants_restaurant"."id", "restaurants_restaurant"."name", "restaurants_restaurant"."owner_id", "restaura...  "restaurants_restaurant"."tenant_id" FROM "restaurants_restaurant" WHERE "restaurants_restaurant"."tenant_id" IN (%s)'
params = (1,), ignored_wrapper_args = (False, {'connection': , 'cursor': })

def _execute(self, sql, params, *ignored_wrapper_args):
# Raise a warning during app initialization (stored_app_configs is only
# ever set during testing).
if not apps.ready and not apps.stored_app_configs:
warnings.warn(self.APPS_NOT_READY_WARNING_MSG, category=RuntimeWarning)
self.db.validate_no_broken_transaction()
with self.db.wrap_database_errors:
if params is None:
# params default might be backend specific.
return self.cursor.execute(sql)
else:
>                return self.cursor.execute(sql, params)
Это моя модель ресторана:

Код: Выделить всё

from customer.models import CustomerTenant

class Restaurant(models.Model):
name = models.CharField(max_length=255)
owner = models.ForeignKey(User, related_name="restaurants", on_delete=models.CASCADE)
description = models.TextField(blank=True, default="")
created_at = models.DateTimeField(auto_now_add=True)
tenant = models.ForeignKey(CustomerTenant, on_delete=models.CASCADE, related_name="restaurants")

def __str__(self):
return self.name`
Это моя модель арендатора

Код: Выделить всё

from django.conf import settings
from django.core.exceptions import ValidationError
from django.db import models
from django_tenants.models import DomainMixin, TenantMixin

class CustomerTenant(TenantMixin):
name = models.CharField(max_length=255)
owner = models.OneToOneField("auth.User", on_delete=models.CASCADE, related_name="owned_tenant")
created_on = models.DateField(auto_now_add=True)

# Required fields for django-tenants
auto_create_schema = settings.TENANTS.get("AUTO_CREATE_SCHEMA", True)
auto_drop_schema = settings.TENANTS.get("AUTO_DROP_SCHEMA", False)

def __str__(self):
return self.name

class Domain(DomainMixin):
tenant = models.ForeignKey("CustomerTenant", on_delete=models.CASCADE, related_name="domains")
domain = models.CharField(max_length=255, unique=True)
is_primary = models.BooleanField(default=False)  # Support multiple domains per tenant

def __str__(self):
return self.domain

def clean(self):
# Ensure only one primary domain per tenant
if self.is_primary and Domain.objects.filter(tenant=self.tenant, is_primary=True).exists():
raise ValidationError("Only one primary domain is allowed per tenant.")
Это мои тесты:

Код: Выделить всё

from django.contrib.auth.models import User
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from rest_framework_simplejwt.tokens import RefreshToken
from django.core.management import call_command
from django_tenants.test.cases import TenantTestCase
from django_tenants.test.client import TenantClient
from django.db import connection

from api.models import UserProfile
from order.models import Priority

from .models import Ingredient, Product, ProductFilter, Restaurant, Version

class RestaurantTests(TenantTestCase, APITestCase):
@classmethod
def setup_tenant(cls, tenant):
"""
Add any additional setting to the tenant before it gets saved.
This is required if you have required fields.
"""
call_command("createadmin", username="admin", email="[email protected]", password="password")
tenant.owner_id = 1
return tenant

def setUp(self):
super().setUp()
self.user1 = User.objects.get(username="admin")
UserProfile.objects.create(user=self.user1, role="owner", restaurant=None)

self.user2 = User.objects.create_user(username="user2", password="password123")
UserProfile.objects.create(user=self.user2, role="owner", restaurant=None)
self.client = TenantClient(self.tenant)

# Log in user1 and get the JWT token
self.token = self.get_jwt_token(self.user1)

self.client.default_format = "json"
Кто-нибудь знает, почему демонтаж не может справиться с окончанием моего теста?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ngo-tenant
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»