Django中如何通过id或pk查询数据实现用户退出房间功能
问题修正方案
现有代码存在3处核心错误:
- URL配置与视图参数不匹配:URL规则里定义的路径参数是
pk,但视图函数接收的参数名为room,还多余尝试从GET请求参数获取房间主键 - 数据查询逻辑错误:查询
RoomMember成员关系时多余关联了Messages表,外键匹配逻辑完全错误,不需要通过消息表查询成员关系 - URL路径语义错误:退出房间的路径后缀多余携带
join,语义和业务逻辑冲突
各模块修正代码
1. urls.py 修正
path("leave/<int:pk>/", views.leave_room, name="leave_room"),
删除多余的/join/后缀,路径参数pk和视图接收参数对应。
2. views.py 修正
from django.shortcuts import get_object_or_404, redirect def leave_room(request, pk): # 直接通过路径传入的pk查询房间实例 room = get_object_or_404(Room, pk=pk) # 直接查询当前用户和当前房间的成员关系 membership = RoomMember.objects.filter(user=request.user, room=room) # 存在成员关系才执行删除 if membership.exists(): membership.delete() return redirect("/")
移除了冗余的Messages表关联逻辑,直接通过房间实例查询成员关系,增加了异常处理避免房间不存在时报错。
3. html模板代码无需修改
原有模板中的{% url 'leave_room' pk=room.pk %}调用逻辑和修正后的URL配置完全匹配,可直接使用。
内容的提问来源于stack exchange,提问作者Ace7python
相关产品推荐
相关产品推荐

