django - 检查 Django 中是否存在多对多?
问题描述
我有两个模型,
Model University:
name = models.CharField(max_length=120)
Model Students:
name = models.CharField(max_length=120)
wishlist = models.ManyToManyField(University, blank=True)
基本上这是愿望清单,用户可以将大学添加到他们的愿望清单中,如果重新点击心形图标我需要删除愿望清单:
这是我的代码:
student = request.user.student
university = University.objects.get(id=pk)
if university.student_set.exists():
student.wishlist.remove(university)
else:
student.wishlist.add(university)
因此,当用户1将大学1添加到愿望清单时,用户2无法将大学1添加到愿望清单,我不知道错误在哪里!请指导,任何学生都可以将任何大学添加到他们的愿望清单中(这是要求)
我认为问题出在 if 语句上
解决方案
university.student_set.exists()
这不会检查任何特定的学生。它应该是:
university.student_set.filter(id=student.id).exists()
所以总的来说,这种情况将是:
student = request.user.student
university = University.objects.get(id=pk)
if university.student_set.filter(id=student.id).exists():
student.wishlist.remove(university)
else:
student.wishlist.add(university)