2017-11-08 4 views
1

Ich möchte ein Django Formular erstellen, um Benutzerinformationen zu bearbeiten. Ich habe:Vermeiden Benutzer pk in Django Benutzer Bearbeitungsformular

urls.py

url(r'^settings/(?P<pk>[0-9]+)/', views.edit_profile, name='edit'), 

views.py

@login_required 
def edit_profile(request, pk): 
    user = get_object_or_404(User, pk=pk) 
    if request.method == 'POST': 
     form = UserForm(request.POST, instance=user) 

     if form.is_valid(): 
      form.save() 
    else: 
     form = UserForm(instance=user) 
    return render(request, 'edit_user.html', {'form': form}) 

wie diese, wenn ein Benutzer bearbeiten seine Informationen können pk von URL ändern und anderen Benutzern Informationen sehen . Wie kann ich dieses PK in der URL verstecken?

Danke.

+0

Ja, ich weiß, dass request.user ist immer der Login-Benutzer –

+1

@ P.Rodoreda so, was ist die Frage? –

Antwort

3

Es gibt keine Notwendigkeit, neu zu starten, die pk in der URL überhaupt zu akzeptieren. Der angemeldete Benutzer ist immer als request.user verfügbar. Sie können dies also direkt als Instanzargument an das Formular übergeben.

if request.method == 'POST': 
    form = UserForm(request.POST, instance=request.user) 

    if form.is_valid(): 
     form.save() 
else: 
    form = UserForm(instance=request.user) 
return render(request, 'edit_user.html', {'form': form}) 
-2

Sie können einen benutzerdefinierten Vorlagenfilter erstellen, der überprüft, ob der Benutzer sein eigenes Profil bearbeitet oder nicht.

erstellen benutzerdefinierten Tag:

erster Sende Kontext pk genannt, die das Profil pk dann gleich ..

ein Verzeichnis templatetags im App-Verzeichnis mit dem Namen erstellen und eine Python-Datei hinzufügen darin __init__.py genannt - zwei unter Partituren - erstellen nun eine andere Datei profile_extras.py Typ dies genannt:

from django.template.loader_tags import register 
@register.filter(name="ownPro") 
def ownPro(user, id): 
    if Profile.objects.get(id=id).user == user: 
     return True 
    else: 
     return False 

jetzt im Bearbeitungs pr ofile Vorlage fügen Sie diese

{% load profile_extras %} 

{% if user|ownPro:pk %} 

.... 
allow to edit 

{% else %} 
    <p>you are not allowed </p> 
{% endif %} 

vergessen Sie nicht, den Server

0

Update Ihrer URL

url (r '^ Einstellungen /', views.edit_profile, name = 'Bearbeiten')

try POST-Anforderung an diese URL zu senden und niemand sieht, was Sie an den Server senden.