Django mit mehreren Datenbanken und App-spezifischen Routern kann keine Benutzer in MSSQL hinzufügen

8

Wir haben eine Django-Anwendung, die eine Verbindung zu mehreren MS SQL-Datenbankinstanzen herstellt. Es gibt eine router.py für jede App, die die Prozesse zu jeder Datenbank leitet.

Dies ist das erste Mal, dass ich mehrere Datenbankzugriffe eingerichtet habe.

Django integrierte Apps werden über dieses router.py:

an die Standarddatenbank weitergeleitet %Vor%

Wir verwenden die LDAP-Authentifizierung und die integrierte Authentifizierung von Django. Die Idee ist, dass Intranet-Benutzer sich gegen unseren AD-Server authentifizieren können. Externe Benutzer können sich registrieren und werden mit Djangos Authentifizierung authentifiziert.

Wenn die Standarddatenbank auf Folgendes eingestellt ist:

%Vor%

LDAP funktioniert, aber ich kann keinen Benutzer zu Djangos Authentifizierung hinzufügen. Der Administrator zeigt eine "Erfolgsmeldung" an, aber der Benutzer wird nicht zur Datenbank hinzugefügt.

Wenn ich die Standarddatenbank wieder auf SQLLite umstelle, kann ich mich gegen AD authentifizieren und Django-Benutzer hinzufügen.

Also, ich glaube nicht, dass es ein Problem mit der Datei routers.py ist. Ich befürchte, dass dies ein Problem mit der Engine 'sql_server.pyodbc' sein könnte.

BEARBEITEN: Pro Anfrage, hier sind die Datenbankeinstellungen:

%Vor%

HINWEIS: Ich denke, dass dies mit der Art und Weise zu tun hat, wie Django neue Benutzer speichert. Ich werde dort nachsehen. Ich kann den Befehl createsuperuser verwenden, um weitere Superuser hinzuzufügen, während beide Authentifizierungs-Backends vorhanden sind. Bestätigt, ich kann normale Benutzer über die Shell erstellen, aber nicht über den Admin.

Hinweis zur Nachverfolgung: Habe noch immer nicht das Problem mit dem Admin gefunden, aber ich habe festgestellt, dass ich Benutzer über ein Formular hinzufügen konnte. Ich denke, das Problem muss ein Fehler im Admin sein.

Bearbeiten:

Per @ AndrewSmiley's Bitte:

Django Admin Benutzeransicht hinzufügen

%Vor%

UPDATE:

Per @ user1797792 Vorschläge, Ich habe ein benutzerdefiniertes UserCreationForm erstellt, um den date_joined -Wert festzulegen, aber wir können immer noch keine Benutzer über den Django Admin hinzufügen.

Relevante forms.py & amp; admin.py Einträge sind unten:

%Vor%     
Dustin Holden 29.10.2015, 18:19
quelle

2 Antworten

0

Nach der Befolgung aller Vorschläge, die über die Kommentare und Antworten eingereicht wurden. Wir haben festgestellt, dass das Problem ein undokumentierter Fehler in der django-pyodbc-azure -Bibliothek ist.

Nachdem wir eine PostgreSQL-Datenbank gestartet und unsere Django-App verbunden hatten, konnten wir diesen Fehler nicht mehr erstellen. Wir haben auch FreeTDS / ODBC-Treiber verwendet, um mit der MSSQL-Datenbank zu kommunizieren, und konnten sie nicht neu erstellen.

    
Dustin Holden 18.11.2015, 21:24
quelle
0

Ich denke, es gibt ein Problem mit nullbaren Feldern und einen Fehler in der UserCreationForm. Ich kann dieses Problem nicht replizieren, da ich keinen MSSQL-Server habe.

Ссылка

Diese Funktion wird vom Verwaltungsbefehl verwendet. Es generiert eine timezone.now () für die date_joined -Eigenschaft, während das Formular im Adminpanel nur die save () - Funktion für das Objekt selbst verwendet, was dies nicht tut.

date_joined scheint NULL zu bleiben, wenn Sie einen Benutzer im Admin-Panel erstellen. Können Sie überprüfen, ob diese Spalte einen Standardwert in der MSSQL-Datenbank hat? Und ist NULLBAR. Wenn nicht, und es ist nicht nullbar. Dann liegt ihr Problem.

Dann sollten Sie das UserCreationForm bearbeiten. Hier ist ein StackOverflow-Eintrag , der Ihnen zeigt, wie Sie dies tun können.

    
user1797792 17.11.2015 10:39
quelle