2017-01-14 4 views
0

Ich möchte Benutzer entfernen.Benutzer in Django entfernen

Ich weiß, dass ich wahrscheinlich eine Bibliothek wie allauth verwenden kann, aber ich möchte dies aus meiner Sicht tun. Ich habe kein Tutorial dafür gefunden, also versuche ich diese Art von Fehlern zu lernen.

Ok. so in Urls ich habe:

urlpatterns = [ 

    ('^remove$', views.remove_user, name="remove"), 
] 

Formen:

class RemoveUser(forms.ModelForm): 

    class Meta: 
     model = User 
     fields = ('username',) 

Ansichten:

@login_required(login_url='http://127.0.0.1:8000/') 
def remove_user(request): 
    if request.method == 'POST': 
     form = RemoveUser(request.POST) 
     username = request.POST.get('username') 
     if form.is_valid(): 
      rem = User.objects.get(username=username) 
      rem.delete() 
      return redirect('main') 
    else: 
     form = RemoveUser() 
    context = {'form': form} 
    return render(request, 'remove_user.html', context) 

kann ich auf Website und geben Sie den Text in Textfeld. Wenn ich zufälligen Benutzernamen gebe, erhalte ich den Fehler "Benutzer existiert nicht", also alles in Ordnung, aber wenn ich den richtigen Benutzernamen eintippe, erhalte ich die Nachricht: "Ein Benutzer mit diesem Benutzernamen existiert bereits" und dieser Benutzer wird nicht entfernt.

Bitte, können Sie mir dabei helfen?

+0

Verwenden Sie keine Pastebin, um Ihren Code zu veröffentlichen. Stell es hier ab. – utkbansal

+0

Beachten Sie, dass es üblicher ist, einen Benutzer inaktiv zu machen, als ihn zu löschen, damit die mit dem Benutzer verbundenen Daten nicht gelöscht werden, andere Personen keinen neuen Benutzer mit dem alten Benutzernamen usw. registrieren können. Wenn ein Benutzer aktiv ist = Falsch, er kann sich nicht mehr einloggen. – RemcoGerlich

+0

@utkbansal danke, bearbeitet – Maciejjy

Antwort

1

ändern Ihre Form zu einem normalen form-

class RemoveUser(forms.Form): 
    username = forms.CharField() 

Die Ansicht wird wie folgt -

@login_required(login_url='http://127.0.0.1:8000/') 
def remove_user(request): 
    if request.method == 'POST': 
     form = RemoveUser(request.POST) 

     if form.is_valid(): 
      rem = User.objects.get(username=form.cleaned_data['username']) 
      if rem is not None: 
       rem.delete() 
       return redirect('main') 
      else: 
       ## Send some error messgae 
    else: 
     form = RemoveUser() 
    context = {'form': form} 
    return render(request, 'remove_user.html', context) 

EDIT-- Eine andere Möglichkeit, das gleiche Problem zu nähern, ist es, den Benutzer zu deaktivieren

if form.is_valid(): 
     rem = User.objects.get(username=form.cleaned_data['username']) 
     if rem is not None: 
      rem.is_active = False 
      rem.save() 
+0

Ok, die jetzt arbeiten. Ich musste von FormForm zu Form wechseln, genau wie du gesagt hast. Vielen Dank. – Maciejjy