Python 在Django中将字段序列化为JSON对象
(Django 1.8.5)Python 在Django中将字段序列化为JSON对象,python,django,python-3.x,python-2.7,django-queryset,Python,Django,Python 3.x,Python 2.7,Django Queryset,(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
假设我想打印出每个用户的答案和不同问题的数量
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))
现在, 给我
{'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) 我只想知道身份证和昵称。其他字段,如电子邮件(实际上,还有其他字段)不应包含在结果中。事实上,这是默认的
值
行为。如果有一个名为user的字段是一个外键,则默认的values()
调用将返回一个名为user\u id的字典键,因为这是存储实际值的隐藏模型属性的名称。调用values()并传入字段名时,可以传入user
或user\u id
,然后返回相同的内容,字典键将与传入的字段名匹配
您可以手动执行此操作:
for stat in stats:
stat['user'] = User.objects.filter(id=stat['user']).values('id', 'nickname')
查看更多详细信息
for stat in stats:
stat['user'] = User.objects.filter(id=stat['user']).values('id', 'nickname')