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
. так как же мне отфильтровать для каждого пользователя его самый продаваемый курс?
Вы можете попробовать аннотировать подсчеты курсов следующим образом:
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
из диктанта