Django: как фильтровать по самому продаваемому товару

У меня есть модели курсов и пользователи могут покупать эти курсы, теперь я хочу фильтровать курсы по самому продаваемому курсу, я пробовал использовать django agreegate, но он, кажется, не дает мне то, что я хочу, или, возможно, я делаю это не так, как надо.

у меня есть models.py, в котором хранятся курсы


class Course(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    course_title = models.CharField(max_length=100, null=True, blank=True)
    slug = models.SlugField(unique=True)

У меня также есть эта модель, которая хранит курсы, которые были куплены и записаны

class UserCourse(models.Model):
    user = models.ForeignKey(User , null = False , on_delete=models.CASCADE)
    course = models.ForeignKey(Course , null = False , on_delete=models.CASCADE)
    date = models.DateTimeField(auto_now_add=True)

я не знаю, как написать представление для фильтрации курсов по самому продаваемому. из изображения ниже видно, что learn angular updated является самым продаваемым курсом для создателя destiny. так как же мне отфильтровать для каждого пользователя его самый продаваемый курс?

enter image description here

Вы можете попробовать аннотировать подсчеты курсов следующим образом:

course_counts = UserCourse.objects.values("course").annotate(count=models.Count("course"))

Затем сортировка:

sorted_courses = sorted(course_counts, key=lambda x: x['count'],reverse=True)

У вас будет sorted_courses[0], содержащий наибольшее значение, и вы сможете извлечь UUID из диктанта

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