Как удалить конкретный элемент из внешнего ключа в .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.

Вернуться на верх