Listview должен возвращать только те курсы, которые студент купил в django
Мои модели
User
class User(AbstractUser):
is_student = models.BooleanField(default=False)
....
purchased = models.ManyToManyField(Course, blank=True)
Курс
class Course(models.Model):
title = models.CharField(max_length=1000)
.....
price = models.FloatField()
Мои взгляды
class StudentPurchasedcourse(ListView):
model = Course
template_name = 'tutspack/purchasedcourse.html'
context_object_name = 'course'
def get_queryset(self):
queruset = Course.objects.filter(pk=self.request.user.purchased.all()).order_by('title')
return queruset
My Urls.py
path('purchased_course/', views.StudentPurchasedcourse.as_view(), name='purchased-course'),
Я хочу вернуть все курсы, которые студент приобрел на странице studentViewpage. Было бы полезно, если бы кто-нибудь знал ответ.
Для такого запроса следует использовать обратное отношение. Начните с добавления related_name
к полю purchased
из User
:
class User(AbstractUser):
...
purchased = models.ManyToManyField(Course, blank=True, related_name="buyers")
Затем вы можете легко использовать это имя в запросах, основанных на отношениях:
Course.objects.filter(buyers=self.request.user).order_by('title')