Редактировать и удалять конкретного пользователя без использования админ-панели в Django - PullRequest
0 голосов
/ 10 июля 2019

Я создал свои модели, используя модель пользователя django. Я могу выполнить функцию редактирования созданной формы. Теперь я хочу выполнить УДАЛИТЬ определенные данные пользователя с помощью кнопки УДАЛИТЬ. Вот мой код

forms.py

class EditProfileForm(forms.ModelForm):
    class Meta():
        model = User
        fields = ['first_name','last_name','username','email','password']
        help_texts={
            'username': None
        }

views.py

def index(request):
    form = GithubInfo(request.POST)
    name=''
    if form.is_valid():
        name = form.cleaned_data.get("name") 
        form.save()
    context = {'form':form , 'name':name}
    return render(request,'signupapp/index.html',context)

def edit_profile(request):
    user = request.user
    form = EditProfileForm(request.POST or None, initial={'first_name':user.first_name, 'last_name':user.last_name, 'username':user.username, 'email':user.email, 'password':user.password})
    if request.method == 'POST':
        if form.is_valid():
            user.first_name = request.POST['first_name']
            user.last_name = request.POST['last_name']
            user.username = request.POST['username']
            user.email = request.POST['email']
            user.password = request.POST['password']
            user.save()
            return HttpResponseRedirect(reverse('signupapp:index'))
    context = {"form": form}
    return render(request, "signupapp/edit_profile.html", context)



def delete_profile(request, username):
    profile = UserProfileInfo.objects.get(username=username)
    if request.method == 'POST':
        profile.delete()
        return HttpResponseRedirect(reverse('signupapp:index'))
    return render(request, "signupapp/delete_profile.html", {'profile': profile})

edit_profile.html

<form method="POST" action="" class="" >
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Save</button>
</form>

delete_profile.html

 <form action="" method ="POST">
    {% csrf_token %}
    <p>Are you sure to delete "{{UserProfileInfo.username}}"?</p>
    <input type="submit" value="Delete"/>
</form>

urls.py

url(r'^index/$',views.index,name='index'),
url(r'^edit/$', views.edit_profile, name='edit'),
url(r'^delete/<str:username>/$', views.delete_profile, name='delete')

вот мои ссылки на редактирование и удаление для редактирования и удаления деталей в

index.html

<h1>Welcome!</h1>
{% if user.is_authenticated %}
<h3>Firstname: {{ user.first_name }}</h3>
<h3>Lastname: {{ user.last_name }}</h3>
<h3>Username: {{ user.username }}</h3>
<h3>Email: {{ user.email }}</h3>
{% else %}
<h2>Register or Login if you'd like to</h2>
{% endif %}
<a href="{% url 'signupapp:edit' %}"><input type="button" value="Edit"/></a>
<a href="{% url 'signupapp:delete' %}"><input type="button" value="Delete"/></a>

Когда я запускаю этот код на сервере, я получаю эту ошибку

TypeError at /delete/
delete_profile() missing 1 required positional argument: 'username'

Может кто-нибудь помочь мне преодолеть эту ошибку. Заранее спасибо.

1 Ответ

1 голос
/ 10 июля 2019

Измените ваши взгляды так:

 def edit_profile(request):
        user = request.user
        if request.method == 'POST':
           form = EditProfileForm(request.POST or None,instance= user)

            if form.is_valid():
               user = form.save()

               user.save()
               return HttpResponseRedirect(reverse('signupapp:index'))
       else:
          form = EditProfileForm()
       return render(request, "signupapp/edit_profile.html", {'form':form,'user':user})

И в вашем шаблоне передайте запрашиваемое значение пользователя следующим образом:

<form method="POST" action="" class="" >
    {% csrf_token %}
    <input type='text' name = 'first_name' value={{user.first_name}}
  <input type='text' name = 'lastt_name' value={{user.last_name}}
 .............................
    <button type="submit">Save</button>
</form>

Для удаления вы можете сделать вот так.

def delete_profile(request, username):
    user = UserProfileInfo.objects.get(username=username)
    if user:
          user.delete()
          messages.success(request,'user with username {} deleted'.format(user.username))
          return redirect('redirect where you want')
    else:
        messages.error(request,'no user found')
        return redirect('redirect where you want')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...