如何从 .views 中的外键中删除特定项目?姜戈
how to delete an specific item from a foreign key within .views? Django
我正在开发一个 Django 应用程序,您只能在活动所有者的批准下加入活动。
至此,我已经有了将当前用户添加到事件中进行审批的功能。
.观看次数
@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('/')
我的情况是,我在获取活动的服务员(所有添加为服务员的用户)方面遇到了问题,因此所有者可以拒绝他想要的任何请求。
如何更改此设置以便该函数将删除事件的特定用户?
谢谢!!
补充:
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 %}
您需要在 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 教程中有很长的解释。
我正在开发一个 Django 应用程序,您只能在活动所有者的批准下加入活动。
至此,我已经有了将当前用户添加到事件中进行审批的功能。
.观看次数
@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('/')
我的情况是,我在获取活动的服务员(所有添加为服务员的用户)方面遇到了问题,因此所有者可以拒绝他想要的任何请求。
如何更改此设置以便该函数将删除事件的特定用户?
谢谢!!
补充:
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 %}
您需要在 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 教程中有很长的解释。