Информация
Позволяет разделить слои, чтобы избежать путаницы. Существует 2 слоя: на стороне клиента и на стороне сервера
на стороне сервера
Django работает на стороне сервера, он выбирает данные из переменных что вы отправили на свою страницу все остальное, поэтому он, в общем, смонтирует одну HTML страницу и вернет ее вашему клиенту (в этом случае вам)
Клиентская сторона
Это страница, которая была возвращена django (или любым другим сервером или фреймворком), запущенным на клиентском браузере, а не на сервере, который называется DOM, и django не может манипулировать им, потому что он уже обработан, чтобы сделать это, вам нужно будет использовать Javascript, чтобы вы могли взаимодействовать с элементами со своей страницы, запускать события и видеть, были ли какие-либо данные изменены на стороне клиента, один простой способ использовать Javascript на клиенте сторона использует Jquery, потому что одна библиотека более дружественная
Вот ваш код с небольшим изменением, я добавил имена и идентификаторы в обе ваши ссылки, которые называются btnAccept и btnReject, и добавил <input type="hidden" id="btnType" name="btnType">
{% for tutor_application in tutor_application_list %}
<div class="card" style="width: 15rem;">
<img src="{{ tutor_application.tutor.picture.url }}" class="card-img-top" >
<div class="card-body">
<h5 class="card-title">
{{ tutor_application.tutor.chalkslate_user.first_name }} {{ tutor_application.tutor.chalkslate_user.last_name }}
</h5>
<h6 class="card-subtitle mb-2 text-muted">{{ tutor_application.note }}</h6>
<h6 class="card-subtitle mb-2 text-muted">{{ tutor_application.posted }}</h6>
</div>
<input type="hidden" name="btnType">
<a id="btnAccept" name="btnAccept" class="btn btn-outline-success" role="button" type="submit"> Accept </a>
<a id=="btnReject" name="btnReject" class="btn btn-outline-danger" href="#" role="button"> Reject </a>
</div>
{% endfor %}
Вот некоторые код с Jquery для манипулирования им впереди, если вы хотите сделать это на стороне клиента
window.addEventListener("DOMContentLoaded", function(){
$("#btnAccept").click(function(){
$("#btnType").val('accepted');
});
$("#btnReject").click(function(){
$("#btnType").val('rejected');
});
});
Так что в ваших данных поста просто проверьте значение из btnType и посмотрите, было ли принято или отклонено
Или просто добавьте имена тегов в свои входные данные (как я делал раньше), и вы можете получить их из данных вашего запроса ... вы должны изменить тег на и просто получить его в своем бэкэнде при нажатии на нем
РЕДАКТИРОВАТЬ
Все ваши данные из вашей формы будут в request.POST
(если вы отправите его как POST), так что вы можете получить как request.POST['email']
(, что это немного грязно, потому что, если у вас нет электронной почты в POST, возникнет ошибка ), или лучший подход, request.POST.get('email', None)
, то попытайтесь получить атрибут с именем email, если не найдете, он просто вернет None (null), так что вы можете проверить его с помощью if или что-то в этом роде
О вашем объекте tutor_application
, когда вы визуализируете свой шаблон с помощью tutor_application.tutor.chalkslateuser.email, который будет просто электронной почтой в виде строки, так что вы не удерживаете ссылка на объекты ш Если вы отправите его на веб-интерфейс, то, если вы хотите узнать, какой репетитор выбран, вам, возможно, придется добавить идентификатор или адрес электронной почты в качестве ввода в html, чтобы вы могли отправить его обратно на сервер и вычислить что такое репетитор
<input type="hidden" name="email" value="{{tutor_application.tutor.chalkslateuser.email}}">
И в вашем бэкэнде вы получите его как
email = request.POST.get('email', None')
Имейте в виду, чтобы поменять теги <a>
на <input name="">
, чтобы вы могли получить их в своем бэкэнд в качестве атрибутов в запросе.POST