这几乎肯定是一个重复的问题,在这种情况下道歉,但我一直在搜索大约半小时的SO,但在这里找不到答案.对不起,我可能使用了错误的搜索字词.
我有一个用户模型和一个提交模型.每个Submission都有一个名为user_submitted的ForeignKey字段,用于上传它的用户.
class Submission(models.Model):
uploaded_by = models.ForeignKey('User')
class User(models.Model):
name = models.CharField(max_length=250 )
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:如何获得提交最多的三个用户的列表?
我尝试在User模型上创建num_submissions方法:
def num_submissions(self):
num_submissions = Submission.objects.filter(uploaded_by=self).count()
return num_submissions
Run Code Online (Sandbox Code Playgroud)
然后做:
top_users = User.objects.filter(problem_user=False).order_by('num_submissions')[:3]
Run Code Online (Sandbox Code Playgroud)
但这失败了,我尝试过的所有其他事情都失败了.我可以使用智能数据库查询实际执行此操作吗?或者我应该在视图文件中做些更hacky的事情?
Ben*_*mes 103
from django.db.models import Count
top_users = User.objects.filter(problem_user=False) \
.annotate(num_submissions=Count('submission')) \
.order_by('-num_submissions')[:3]
Run Code Online (Sandbox Code Playgroud)
你没有problem_user在你的示例模型代码中提到,但我已经假设它是一个BooleanField开启User.
| 归档时间: |
|
| 查看次数: |
14869 次 |
| 最近记录: |