首页 > 解决方案 > 检查 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 语句上

标签: django

解决方案


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)

推荐阅读