如何在Django中通过url传递两个PK



我已经创建了一个将用户添加到事件中的函数,该函数运行良好,但是,我在从事件中删除用户的函数方面遇到了问题,我不知道如何获得助理,以便所有者可以删除它。

现在,我有这个:

views.py(将用户添加到事件的函数(

@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, id):
previous = request.META.get('HTTP_REFERER')
try:
post = Post.objects.get(pk=pk)
attendant = Attending.objects.get(id=attendance_id)
Attending.objects.filter(post=post, attendant=attendant).delete()
messages.success(request, f'User removed!')
return redirect(previous)
except post.DoesNotExist:
return redirect('/')

URL.py

path('post/(?P<pk>[0-9]+)/remove_attendant/(?P<attendance_id>[0-9]+)$', views.remove_attendant, name='remove-attendant'),

欢迎任何帮助或评论!非常感谢。

attendance_id在您的代码中似乎未定义。

def remove_attendant(request, pk, attendance_id):应该是你所说的。

同样在理论上,您应该能够从request.resolver_match.kwargs访问pkattendance_id

您可以简单地在url路径中使用位置参数,而不需要regex。如果有帮助的话(如果经常帮助我的话(,你的变量名也可以是描述性的。

path('remove-attendant-view/<post_id>/<attendance_id>/', views.remove_attendant, name='remove_attendant'),

在views.py中,类似于:

def remove_attendant(request, post_id, attendance_id):

无论您在哪里调用这个视图函数,都必须确保您的url在上下文中按顺序具有这些id和pk,例如:

<a href="{% url 'remove_attendant' post_id=post_id, attendant_id=attendance_id %}">Remove Attendant</a>

最新更新