gpt4 book ai didi

python - 在Django中注释多对多关系

转载 作者:行者123 更新时间:2023-11-30 23:08:49 25 4
gpt4 key购买 nike

我有两个模型 User 和 VideoData。这两个模型包含每个用户的详细信息以及该用户观看的视频。我使用了多对多关系。现在我想按用户数量过滤观看次数最多的 10 个视频。

class User(models.Model):
user_id = models.CharField(max_length=40,unique=True)
user_name = models.CharField(max_length=40)
user_email = models.EmailField()
user_city = models.CharField(max_length=40)
videos_watched = models.ManyToManyField('VideoData', through='WatchedVideo')
class Meta:
ordering = ['user_id']
verbose_name = 'User MetaData'
verbose_name_plural = 'Users MetaData'
def __unicode__(self):
return self.user_id

class VideoData(models.Model):
video_id = models.CharField(max_length=40,unique=True)
video_name = models.CharField(max_length=40)
class Meta:
verbose_name = 'User_Video MetaData'
verbose_name_plural = 'Users_Video MetaData'
def __unicode__(self):
return self.video_name

class WatchedVideo(models.Model):
user = models.ForeignKey(User, to_field = 'user_id')
videoData = models.ForeignKey(VideoData, to_field = 'video_id')
time = models.PositiveIntegerField(null = True)

我如何注释排名前 10 的视频以及观看这些视频的用户数量?

最佳答案

使用 django ORM 中的计数函数:

    VideoData.objects.annotate(
watches_count=models.Count('user_set')
).order_by('-watches_count')[:10]

关于python - 在Django中注释多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com