Могут ли Модели узнать, какой арендатор его использует?

Я предлагаю SaaS, в основном в виде приборной панели django и настраиваемой панели администратора. Используя арендаторов, у меня есть одна схема для каждого клиента, совместно использующего базу данных. У меня проблема в том, что клиент должен иметь возможность создавать объекты через страницу администратора, а объекты должны создавать URL-адрес с информацией о арендаторе. Например, URL-адрес клиента Y будет Y.xzxzxz.com, а URL-адрес клиента X будет X.xzxzxz.com. Будет несколько типов URL-адресов с одинаковым префиксом. В настоящее время клиенты должны вручную вводить префикс клиента. Может ли класс Models знать, какая схема его использует?


person JohnDoe    schedule 06.11.2019    source источник


Ответы (2)


Вообще не понятно, о чем вы спрашиваете. Но я предполагаю, что вы хотите знать, в какой из нескольких баз данных существует модель.

Ваш settings.py, скорее всего, будет иметь DATABASE ключи, такие как:

DATABASES = {
    'default': 'postgres://user:pass@localhost:5432/default',
    'tenant_1': 'postgres://user:pass@localhost:5432/tenant_1',
}

Поэтому, как только вы сохранили модель, вы можете выяснить, в какой базе данных она существует, выполнив:

instance = YourModel.objects.create()
print(instance._state.db)
# Prints "default" or "tenant_1" depending on which database its in

соответствующие документы здесь

person thclark    schedule 06.11.2019
comment
Это шаблон, который я использовал для создания системы: github.com/tomturner/django-tenants поэтому я настроил арендатора через терминал. URL-адрес в основном self.slug = (self.customerPrefix + .....local.... + ....), и я получаю customerPrefix, потому что сейчас я ввожу его вручную. Я думал о чтении префикса из URL-адреса администратора, если я не найду другого способа. - person JohnDoe; 07.11.2019
comment
@JohnDoe, у большинства ТАК есть работа на полную ставку помимо их OSS и других видов деятельности. Никто не собирается лазить по вашему репо, отлаживая его за вас. Я предлагаю вам прочитать следующее: stackoverflow.com/help/how-to-ask - person thclark; 07.11.2019
comment
... а также поместите минимальный воспроизводимый пример в вопрос stackoverflow.com/help/minimal-reproducible-example - person thclark; 07.11.2019
comment
Я не хотел, чтобы вы думали, что я хотел, чтобы кто-то прочитал их, просто в базе данных есть небольшой раздел, чтобы показать, что я настроил его по-другому. Но ничего из этого даже не нужно. Я просто задал вопрос, который не обязательно связан с какой-либо отладкой или фактическим кодом. Я не ожидал большего, чем нет, потому что х или да, я сделал y - person JohnDoe; 07.11.2019

Я импортировал Connection из django.db, а затем использовал connection.get_tenant().name и получил то, что искал.

person JohnDoe    schedule 21.11.2019