【发布时间】:2016-04-12 17:58:06
【问题描述】:
(Django 1.8.5)
假设我想打印出每个用户的答案数量和不同的问题。
models.py:
class User(models.Model):
id = models.AutoField(db_column='Id', primary_key=True)
nickname = models.CharField(db_column='Nickname', db_index=True, max_length=255)
email = models.EmailField(db_column='Email', db_index=True, null=True)
class Question(models.Model):
id = models.AutoField(db_column='Id', primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, db_column='UserId')
class Answer(models.Model):
id = models.AutoField(db_column='Id', primary_key=True)
question = models.ForeignKey(Question, on_delete=models.CASCADE, db_column='QuestionId')
user = models.ForeignKey(User, on_delete=models.CASCADE, db_column='UserId')
views.py:
from django.db.models import Count
stats = Answer.objects.values('user').annotate(number_of_answers=Count('id'), number_of_answered_questions=Count('question', distinct=True))
现在,
print(stats[0])
给我
{'number_of_answered_questions': 4, 'number_of_answers': 5, 'user': 1}
但是,我希望输出如下所示:
{'number_of_answered_questions': 4, 'number_of_answers': 5, 'user': {'id':1, 'nickname': 'my_nickname'}}
我的序列化器(例如 UserStatSerializer)应该是什么?
注意事项:
1) 我不会使用序列化器进行反序列化。
2) 我只想知道 id 和昵称。其他字段,如 email(实际上也有其他字段)不应包含在结果中。
【问题讨论】:
标签: python django python-3.x python-2.7 django-queryset