Python DRF:如何找到两个字段组合值最高的模型实例?

Python DRF:如何找到两个字段组合值最高的模型实例?,python,django,django-models,django-rest-framework,django-views,Python,Django,Django Models,Django Rest Framework,Django Views,我有一个模型,看起来像这样: class Posts(models.Model): title = models.CharField(max_length=100) creation_timestamp = models.DateTimeField(auto_now_add=True) body = models.CharField(max_length=255) user_id = models.ForeignKey(settings.AUTH_USER_MOD

我有一个模型,看起来像这样:

class Posts(models.Model):
    title = models.CharField(max_length=100)
    creation_timestamp = models.DateTimeField(auto_now_add=True)
    body = models.CharField(max_length=255)
    user_id = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="likes",blank=True)
    dislikes = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="dislikes",blank=True)
我在urls.py中添加了一个端点,以便在访问url
../v1/posts/max interaction count
时,在views.py中运行以下函数:

@api_view(['GET'])
def interaction_count_view(request):
    max_post = None
    max_interactions = 0
    for post in Posts.objects.all():
        interactions = post.likes.count() + post.dislikes.count()
        if interactions > max_interactions:
            max_post = post
            max_interactions = interactions
    return Response({"Post number " :  max_post.pk, "interaction_count ": max_post.likes.count() + max_post.dislikes.count()})

这是可行的,返回具有最大喜欢和不喜欢之和的帖子id。然而,我相信
交互\u计数\u视图
可能不是很具有可伸缩性,因为它是用python编写的,而不是使用使用SQL的内置django方法。是这样吗?如果是这样的话,有什么更好的方法来计算与帖子实例相关联的喜欢和不喜欢的数量?

在queryset上注释计算帖子交互次数的表达式,并使用
latest
获取交互次数最多的帖子:

从django.db.models导入计数
@api_视图(['GET'])
def交互\u计数\u视图(请求):
max_post=Posts.objects.annotate(interactions=Count('likes')+Count('dislikes')).latest('interactions'))
如果是max_post:
返回响应({“Post number”:max_Post.pk,“interaction_count”:max_Post.interactions})
返回响应({“Post number”:无,“interaction_count”:0,“message:“No posts exist!”)
注意:我更改了您传递给应答的字典中的键,它们有额外的空格(
“Post number”
更改为=>
“Post number”
,等等)

注意:理想情况下,型号名称应为单数因此
Post
而不是
Posts

这有用吗?你是说“max_post.likes”而不是“max_post.likes.count()”吗。我不认为.count()会在现场工作