Как назначить функцию кнопке в Django
Я разрабатываю сайт на основе django. Я хочу обновлять информацию о пользователе и удалять его, если нужно, на той же странице. Я создал обновление и оно работает правильно. Но когда я обращаюсь к функции удаления пользователя в том же html-файле, кнопка, которую я хочу, чтобы она удаляла пользователя, также обновляется, как и другая кнопка. Мне нужно, чтобы обе кнопки работали для своих целей. Я подумал, что если ничего не менять, то назначение функции удаления кнопке может помочь, поэтому я и написал такой заголовок. Спасибо!
<div class="login--wrapper">
<form method="POST" class="form">
{% csrf_token %}
<div class="center">
<h1>Kullanıcı Ayarları</h1>
{% csrf_token %}
{% for field in form %}
<div class="mb-3">
<label for="exampleInputPassword1" class="from-label">{{field.label}}</label>
{{field}}
</div>
{% endfor %}
<button type="submit" class="btn btn-primary">Update Info</button>
<button type="submit" class="btn btn-primary">Delete User </button>
</div>
def DeleteUser(request,pk):
user=DataEbotUser.objects.get(id=pk)
if request.method=='POST':
user.delete()
context={'user':user}
return render(request,'home/UsersPage.html',context)
def users(request,pk):
user=DataEbotUser.objects.get(id=pk)
form=EditUserForm(instance=user)
if request.method=='POST':
form=EditUserForm(request.POST, instance=user)
if form.is_valid():
form.save()
context={'form':form , 'users':users}
return render(request,'home/UsersPage.html',context)
Проблема в том, что две ваши кнопки отправляют форму на одну и ту же страницу, которая отобразила форму. Нет никакого способа различить их.
Если вы хотите, чтобы каждая кнопка выполняла разные действия, один из способов сделать это будет следующим:
<button type="submit" class="btn btn-primary">Update Info</button>
<a class="btn btn-danger" type="button" href="{% url 'delete' user.pk %}">Delete User</a>
Поскольку функция users
является единственной, управляющей обновлением информации пользователя на основе данных формы, кнопка Update Info
остается в форме submit button
.
С другой стороны, кнопка Delete User
отличается. Она просто вызывает функцию DeleteUser
, передавая ей pk
, которая будет использоваться для удаления пользователя.
Вот некоторые моменты, которые следует учитывать:
- Функция
DeleteUser
не должна вызываться напрямую. Именно функцияusers
должна выводить страницу. - Вы должны рендерить
user object
в контексте вашей функцииusers
, чтобы иметь возможность получитьpk
пользователя, который будет использоваться для кнопкиdelete
.
- Функция
DeleteUser
должна не рендерить шаблон, а перенаправлять на функциюusers
. Что-то вродеreturn redirect('users', pk=pk)
.