Проверьте, существует ли система Many to Many в 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)
Мы можем предотвратить получение связанного студента пользователя в случае, если мы хотим удалить университет из списка желаний. Обычно это более безопасно, так как User
, у которого нет связанного студента, не вызовет ошибку:
university = University.objects.get(id=pk)
if university.student_set.filter(user=request.user).exists():
Student.wishlist.through.objects.filter(
university=university,
student__user=request.user
).delete()
else:
request.user.student.wishlist.add(university)
Мы можем немного повысить эффективность пути .remove(...)
за счет отсутствия выборки .student
пользователя, и поэтому реализуем это как: