2017-07-10 5 views
-1

Ich arbeite mit meinem Freund an einer Django-Anwendung und wir bekommen ein Problem mit unserer Website.Renderansicht/Vorlage für 2 verschiedene Benutzer verfügbar

Um wieder aufnehmen:

Wir Admin-Benutzer haben, die zu jedem Teil von unserer Website zugreifen können. Unsere Anwendung verwaltet Verträge für verschiedene Unternehmen. Jede Firma kann auf ihre Homepage zugreifen und Interventionen, Punkteguthaben, ... konsultieren.

Jede Firma hat ein Benutzerkonto, um auf unserer Website zu verbinden.

nach dem Log-Prozess auf ihre Homepage zugreifen zu können, schrieb ich in den log application:

def connexion(request): 
    error = False 

    if request.method == "POST": 
     form = ConnexionForm(request.POST) 
     if form.is_valid(): 
      username = form.cleaned_data["username"] 
      password = form.cleaned_data["password"] 
      user = authenticate(username=username, password=password) 
      if user.username == 'Admin': 
       login(request, user) 
       return HttpResponseRedirect(reverse('accueil')) 
      elif user.username == 'Compagny1': 
       login(request, user) 
       return HttpResponseRedirect('http://localhost:8000/Compagny/1/') 
      elif user.username == 'Compagny2': 
       login(request, user) 
       return HttpResponseRedirect('http://localhost:8000/Compagny/2/') 
      else : 
       error = True 
    else: 
     form = ConnexionForm() 

    return render(request, 'connexion.html', locals()) 

Dann Compagny model wie folgt aussieht:

class Compagny(models.Model): 

    Nom = models.CharField(null= False, max_length=70, verbose_name='Nom de Société') 
    ... 
    ... 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=" ") 

Die URL, die auf die Homepage gehen lassen ist :

url(r'^Compagny/(?P<id>\d+)/$', views.Homepage, name="Homepage"), 

Endlich, aus meiner Sicht habe ich:

@login_required 
def Homepage(request, id) : 

    compagny = get_object_or_404(Compagny, pk=id, user=request.user) 
    ... 
    # form part 


     return HttpResponseRedirect('http://localhost:8000/Compagny/'+id) 
    ... 
    return render(request, 'Homepage.html', context) 

Ich habe 2 Fragen zu meinem Prozess:

  • Wie ich zwei user_id für ein compagny einstellen (Admin und compagny_user)?
  • Es gibt einen anderen Weg, der redirect compagny_user auf jeder compagny Homepage besser als mein Skript Teil könnte?
+0

Ich denke, Ihr Freund [fragte diese Frage früher] (https://Stackoverflow.com/q/45006792/1324033), die Antwort auf diese Frage ist, welche Probleme haben Sie mit der Verwendung der Benutzer-ID? Wie kann man 2 IDs setzen würde zu breit sein, sollte man sich 1 Frage pro Frage stellen – Sayse

+0

Ach ich wusste es nicht ... Ich habe einer Compagny eine 'user_id' dank @Alasdair in meiner vorherigen Frage zugewiesen. Aber wenn ich die 'homepage compagny' definiere, die von' user_id compagny' zugänglich ist, kann ich diese Seite nicht als Admin Benutzer erreichen. Wie kann ich Admin-Berechtigungen definieren, um auf jede Homepage zuzugreifen:/ – Andro

Antwort

1

Erste Frage: Ich denke, es ist besser, vom Benutzer auf Compagny zu zeigen. Dann können viele Benutzer auf dasselbe Unternehmen verweisen. Aber wenn Sie möchten, können Sie zu einer many2many-Beziehung wechseln. Ändern Sie Ihr Compagny-Modell:

class Compagny(models.Model): 

    Nom = models.CharField(null= False, max_length=70, verbose_name='Nom de Société') 
    ... 
    ... 
    user = models.ManyToManyField(settings.AUTH_USER_MODEL.username) 

Zweite Frage: Sie können ein Wörterbuch mit Benutzern als Schlüssel und Firmen als Werte erstellen. Zum Beispiel:

AUTH_USER_COMPANY = { 
    'user1': 1, 
    'user2': 1, 
    'user3': 2, 
    ... 
    } 

. Dann HttpResponseRedirect("/Compagny/"+ str(settings.AUTH_USER_COMPANY[settings.AUTH_USER_MODEL]))

Es scheint, als ob Sie das Benutzermodell erweitern müssen.

+0

Der erste Teil funktioniert sehr gut! Laut dem zweiten haben Sie geschrieben: 'Erstellen Sie ein Modellfeld im Benutzermodell, das auf die Firmen-ID verweist. 'Wie kann ich ein neues Modellfeld hinzufügen, wenn meine Benutzertabelle ist:' settings.AUTH_USER_MODEL' – Andro

+0

Ja !. Ich habe mich geirrt. Ich werde meine Antwort mit etwas entsprechend Ihrem Problem aktualisieren. – echefede

+0

Ich habe das Wörterbuch hinzugefügt: 'AUTH_USER_COMPANY = { 'Admin': 1, 'visiteur': 1, 'visiteur2': 2,}' in meiner settings.py Datei. Dann habe ich in meinen Log-Ansichten: 'Wenn Benutzer: Login (Anfrage, Benutzer) Rückkehr HttpResponseRedirect ('http: // localhost: 8000/Compagny /' + str (Einstellungen. AUTH_USER_COMPANY [settings.AUTH_USER_MODEL]))) ' aber ich habe ein Problem aufgetreten: 'Ausnahmetyp: \t KeyError Ausnahmewert: \t u'auth.User'' – Andro

Verwandte Themen