Как удалить конкретный элемент из внешнего ключа в .views? Django
Я работаю над приложением Django, в котором вы можете присоединиться к событиям только с разрешения владельца события.
Сейчас у меня есть функция, которая добавляет текущего пользователя в событие для утверждения.
.views
@login_required
def request_event(request, pk):
previous = request.META.get('HTTP_REFERER')
try:
post = Post.objects.get(pk=pk)
Attending.objects.create(post=post, attendant=request.user)
messages.success(request, f'Request sent!')
return redirect(previous)
except post.DoesNotExist:
return redirect('/')
и вот функция, которая удаляет запрос пользователя (Сейчас удаляется запрос текущего зарегистрированного пользователя)
@login_required
def remove_attendant(request, pk):
previous = request.META.get('HTTP_REFERER')
try:
post = Post.objects.get(pk=pk)
#attendant = #post.attending_set.all
Attending.objects.filter(post=post, attendant=request.user).delete()
messages.success(request, f'User removed!')
return redirect(previous)
except post.DoesNotExist:
return redirect('/')
Моя ситуация заключается в том, что у меня проблема с получением участников мероприятия (все пользователи, которые были добавлены как atendant), так что владелец может отклонить любой запрос, который он хочет.
Как я могу изменить это так, чтобы функция удаляла конкретного пользователя события?
Спасибо!!!
Дополнительно:
models.py
class Attending(models.Model):
is_approved = models.BooleanField(default=False)
attendant = models.ForeignKey(User, related_name='events_attending', on_delete=models.CASCADE, null=True)
post = models.ForeignKey('Post', on_delete=models.CASCADE, null=True)
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
urls.py
path('post/<int:pk>/remove_attendant/', views.remove_attendant, name='remove-attendant'),
.html
{% for user in object.attending_set.all %}
<div class="d-flex mb-3 border-top pt-3">
<div class="p-2 align-self-center">
<div class="mr-1 d-inline-block" style="height:40px; width:40px;">
<img class="rounded-circle img-st-user-pro" src="{{ user.attendant.profile.image.url }}">
</div>
</div>
<div class="p-2 align-self-center">
<h6 class="font-weight-bold mb-0">{{ user.attendant.first_name }}</h6>
<h6 class="mb-0 text-secondary">24 años</h6>
</div>
<div class="ml-auto p-2 align-self-center">
<a href="#" style="font-size: 14px !important;" class="btn-pre p-2 rounded text-decoration-none text-white pl-3 pr-3"><i class="pr-2 fa-solid fa-circle-check"></i>Approve</a>
<a href=" /post/{{ object.pk }}/attendants/{{ object.pk_attendant }}/remove-attendant/" style="font-size: 14px !important;" class="bg-white p-2 rounded text-decoration-none text-dark border pl-3 pr-3 ml-2">Reject</a>
</div>
</div>
{% endfor %}
Вам необходимо иметь ID обслуживающего персонала в URL. Таким образом, что-то вроде posts/<int:pk_post>/attendants/<int:pk_attendant>/remove.
@login_required
def remove_attendant(request, pk_post, pk_attendant):
previous = request.META.get('HTTP_REFERER')
try:
Attending.objects.filter(attendant_id=pk_attendant).delete()
messages.success(request, f'User removed!')
return redirect(previous)
except post.DoesNotExist:
return redirect('/')
Вы можете заметить, что вам даже не нужен id поста в URL. Ваш выбор, если вы хотите сохранить его. BTW, эти вещи подробно описаны в учебнике Django.