我想知道已向特定用户提出的问题数量。
这是我的模特
class TrueOrFalseQuestion(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
content = models.TextField(default='', blank=True)
explanation = models.TextField(default='', blank=True)
class TrueOrFalseUserQuestion(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
creator = models.ForeignKey(User, on_delete=models.CASCADE)
question = models.ForeignKey(TrueOrFalseQuestion, related_name='user_questions', on_delete=models.CASCADE)
有人创建了一个问题,然后当我想为特定用户显示该问题时,我创建了一个TrueOrFalseUserQuestion(并将用户分配为creator
)。
我想知道问题已显示给每个用户多少次。假设ID为1的用户有5个TrueOrFalseUserQuestion,而用户2有3个,那么我想得到这个结果
{"1": 5, "2": 3}
使用Python很容易,但是我认为它会带来较差的性能,有没有办法使用Django ORM做到这一点?
答案 0 :(得分:1)
是的,您可以使用:
from django.db.models import Count
qs = TrueOrFalseUserQuestion.objects.filter(
question=some_question
).values(
'creator'
).annotate(
times=Count('id')
).order_by(
'creator'
)
使用some_question
,我们要获得计数的问题。
这将产生QuerySet
个字典,例如:
<QuerySet [{'creator': 1, 'times': 5}]>
然后我们可以使用字典理解,例如:
result = {
q['creator'] : q['times'] for q in qs
}
答案 1 :(得分:0)
如果我没记错的话,您需要进行Group By
聚合,
from django.db.models import Count
TrueOrFalseUserQuestion.objects.values('creator_id').annotate(max_question=Count('question'))