Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中将字段序列化为JSON对象_Python_Django_Python 3.x_Python 2.7_Django Queryset - Fatal编程技术网

Python 在Django中将字段序列化为JSON对象

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

(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))

现在,

给我

{'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')