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')

Подробнее о запросах

Вернуться на верх