【发布时间】:2021-04-07 15:43:08
【问题描述】:
我有一个看起来像这样的模型:
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中添加了一个endpoint,这样当访问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 与最大喜欢和不喜欢的总和。但是,我相信interaction_count_view 可能不是很有可扩展性,因为它是用 python 编写的,而不是使用使用 SQL 的内置 django 方法。是这样吗?如果是这样,有什么更好的方法来计算与帖子实例相关的喜欢和不喜欢的数量?
【问题讨论】:
-
您的意思是“max_post.likes”而不是“max_post.likes.count()”。我认为 .count() 不会在该领域工作
标签: python django django-models django-rest-framework django-views