Django使用ManyToManyField实现心愿单时多用户无法添加同校问题排查
问题原因
你的判断逻辑确实存在错误:if university.student_set.exists()的作用是判断是否有任意学生将该院校加入过心愿单,只要有一个学生完成了添加操作,该条件就会返回真。所以用户1把院校1加入心愿单后,用户2点击爱心时会直接触发移除逻辑,但用户2的心愿单里从未添加过该院校,自然无法成功添加。
修复方案
你需要把判断逻辑改为校验当前登录学生自己的心愿单中是否包含该院校,修改后的代码如下:
student = request.user.student university = University.objects.get(id=pk) if student.wishlist.filter(id=university.id).exists(): # 当前学生已添加,执行移除 student.wishlist.remove(university) else: # 当前学生未添加,执行新增 student.wishlist.add(university)
如果你使用的是Django 4.0及以上版本,还可以直接调用多对多字段内置的toggle方法简化代码,无需手动写判断逻辑,自动实现关联存在则移除、不存在则添加的效果:
student = request.user.student university = University.objects.get(id=pk) student.wishlist.toggle(university)
内容的提问来源于stack exchange,提问作者sixovov947
相关产品推荐
相关产品推荐

