Възможно ли е Models да знае кой наемател го използва?

Предлагам 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, повечето хора от SO имат работа на пълен работен ден в допълнение към 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
Не исках да мислите, че искам някой да ги прочете, просто има кратък раздел в базата данни, за да покаже, че съм я настроил по различен начин. Но нищо от това дори не е необходимо, просто зададох въпрос, който не е непременно свързан с отстраняване на грешки или действителен код. Не очаквах повече от не, защото x или да, направих y - person JohnDoe; 07.11.2019

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

person JohnDoe    schedule 21.11.2019