如何从.views中的外键中删除特定项?姜戈



我正在开发一个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的用户(,这样所有者就可以拒绝他想要的任何请求。

如何更改此设置,以便函数删除事件的特定用户

谢谢!!

附加:

型号.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 %}

您需要在URL中具有助理ID。所以,类似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('/')

您可能会注意到,您甚至不需要URL中的post-id。如果你想保留它,你的选择。顺便说一句,Django教程中对这些事情进行了详细的解释。

最新更新