2016-06-20 15 views
0

Ich habe Probleme bei der Konfiguration von Django Tenant und Django Guardian. Ich möchte Benutzer nach Schema trennen. Wo sollte ich Guardian einstellen und wie sollte ich es konfigurieren? Bis jetzt habe ich auch versucht, es von TENANT_APP zu SHARED_APP zu wechseln (ich bekomme einen anderen Fehler, der etwas mit anderen Voraussetzungen zu tun hat, auth) und ich bekomme einen Fehler (unten). Eine Alternative, die gut anstelle des Vormunds funktioniert, würde auch geschätzt werden.Django Mieter und Django Guardian Konfiguration settings.py

SHARED_APPS = (
    'tenant_schemas', 
    'myapp.clients', 
    'django.contrib.contenttypes', 
    'django.contrib.staticfiles', 
) 

TENANT_APPS = (
    'django.contrib.contenttypes', 
    'custom_user', 
    'myapp.users', 
    'oauth2_provider', 
    'corsheaders', 
    'django.contrib.auth', 
    'django.contrib.admin', 
    'guardian', 
    'django.contrib.staticfiles', 
    'myapp.accounting', 
    'myapp.budget', 
    'myapp.enterprise', 
    'myapp.payables', 
    'myapp.receivables', 
    'rest_framework_nested', 
    'solo', 
    'rest_framework_swagger',  
) 

Dies ist der Fehler, den ich bekomme, wenn ich Python manage.py migrate_schemas laufen:

relation "users_user" does not exist 
LINE 1: ..."."phone_number", "users_user"."email2" FROM "users_coo... 

Dies geschieht so schnell, wie ich 'Hüterin' in TENANT_APPS

und wenn ich es zugeben in SHARED_APPS ich diese:

psycopg2.ProgrammingError: relation "auth_group" does not exist 

dies kann aber mit django.contrib.admin fixiert werden, das Problem ist, dass ich mag meine Mieter Anwendungsberechtigungen

Zusätzliche Konfiguration um genau zu sein:

REST_FRAMEWORK = { 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'oauth2_provider.ext.rest_framework.OAuth2Authentication', 
    ), 
    'DEFAULT_FILTER_BACKENDS': (
     'rest_framework.filters.DjangoFilterBackend', 
    ), 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
    ) 
} 

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend', 
    'guardian.backends.ObjectPermissionBackend', 
) 

im Protokoll der Suche fand ich heraus, dass django Vormund einen anonymen Benutzer

File "/home/myaccount/workspace/enterprise-api/venv/lib/python3.4/site-packages/django/dispatch/dispatcher.py", line 192, in send 
    response = receiver(signal=self, sender=sender, **named) 
    File "/home/myaccount/workspace/enterprise-api/venv/lib/python3.4/site-packages/guardian/management/__init__.py", line 33, in create_anonymous_user 
    User.objects.get(**lookup) 
    File "/home/myaccount/workspace/enterprise-api/venv/lib/python3.4/site-packages/django/db/models/manager.py", line 122, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "/home/myaccount/workspace/enterprise-api/venv/lib/python3.4/site-packages/django/db/models/query.py", line 381, in get 
    num = len(clone) 
    File "/home/myaccount/workspace/enterprise-api/venv/lib/python3.4/site-packages/django/db/models/query.py", line 240, in __len__ 
    self._fetch_all() 
    File "/home/myaccount/workspace/enterprise-api/venv/lib/python3.4/site-packages/django/db/models/query.py", line 1074, in _fetch_all 
    self._result_cache = list(self.iterator()) 

Gibt es eine Möglichkeit schafft dem Vormund mitteilen, auf eine Mieterdatenbank zu warten?

Antwort

0
SHARED_APPS = (
    #tenant requirements 
    'tenant_schemas', 
    'myapp.clients', 
    'django.contrib.contenttypes', 
    'django.contrib.staticfiles', 
    'django.contrib.auth', 
    'myapp.users', 
    'guardian', 
    'oauth2_provider', 
    'rest_framework', 
) 

TENANT_APPS = (
    'django.contrib.contenttypes', 
    'custom_user', 
    'coopmsapi.users', 
    'oauth2_provider', 
    'corsheaders', 
    'django.contrib.auth', 
    'django.contrib.admin', 
    'guardian', 
    'django.contrib.staticfiles', 
    'rest_framework', 
    'myapp', 
    'myapp.accounting', 
    'myapp.budget', 
    'myapp.enterprise', 
    'myapp.payables', 
    'myapp.receivables', 
    'rest_framework_nested', 
    'solo', 
    'rest_framework_swagger',  
) 

Nach mehreren Versuchen hat das funktioniert. Ich musste auch mehrere Migrationen der Apps SHARED OR MENTANT durchführen, sonst würde django-tenant nicht automatisch aufnehmen, dass es beim Erstellen eines neuen Schemas bestimmte Tabellen erstellen muss.

Verwandte Themen