“类型的对象”&引用;JSON不可序列化

“类型的对象”&引用;JSON不可序列化,json,django,django-rest-framework,Json,Django,Django Rest Framework,我试图创建一个API并传递上下文数据作为响应,但出现错误: TakenQuiz类型的对象不可JSON序列化 代码如下: taken_quizzes = quiz.taken_quizzes.select_related('supplier__user').order_by('-date') total_taken_quizzes = taken_quizzes.count() quiz_score = quiz.taken_quizzes.aggregate(average_score=Avg(

我试图创建一个API并传递上下文数据作为响应,但出现错误:

TakenQuiz类型的对象不可JSON序列化

代码如下:

taken_quizzes = quiz.taken_quizzes.select_related('supplier__user').order_by('-date')
total_taken_quizzes = taken_quizzes.count()
quiz_score = quiz.taken_quizzes.aggregate(average_score=Avg('score'))
least_bid = quiz.taken_quizzes.aggregate(least_bid=Min('least_bid'))

extra_context = {'taken_quizzes': taken_quizzes, 
'total_taken_quizzes': total_taken_quizzes,
'quiz_score': quiz_score, 'least_bid': least_bid, 'matching_bids': matching_bids,
'driver_num': driver_num, 'lat_lon_orig': lat_lon_orig, 'lat_lon_dest': lat_lon_dest,
'user_pass': user_pass, 'username': username, 'password': password, }


print("extra content is ", extra_context)

return Response(extra_context)
以下是上下文数据:

extra content is  {'taken_quizzes': <QuerySet [<TakenQuiz: TakenQuiz object (1)>]>, 'total_taken_quizzes': 1, 'quiz_score': {'average_score': 0.0}, 'least_bid': {'least_bid': 899}, 'matching_bids': [], 'driver_
num': 0, 'lat_lon_orig': '36.1629343, -95.9913076', 'lat_lon_dest': '36.1629343, -95.9913076', 'user_pass': ('jkcekc', 'efce'), 'username': 'efw', 'password': 'sdf'}
Models.py

class TakenQuiz(models.Model):
    supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE, related_name='taken_quizzes')
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='taken_quizzes')
    score = models.FloatField()
    date = models.DateTimeField(auto_now_add=True)
    least_bid = models.IntegerField(default=0)
    confirmed = models.CharField(max_length=100, default='Not Confirmed')
更新

taken_quizzes = quiz.taken_quizzes.select_related('supplier__user').order_by('-date')
taken_quizzs = takenquizSerializer(taken_quizzes).data

您需要通过某种序列化程序或调用 “.values()”并指定所需的键(如果有)(否则它将作为字典提供模型的所有值)


您需要通过某种序列化程序或调用 “.values()”并指定所需的键(如果有)(否则它将作为字典提供模型的所有值)


正如ruhaib提到的,您需要序列化数据。如果我不想为模型定义特殊的序列化程序,这就是我要做的

    from django.core import serializers

    taken_quizzes=....
    data=serializers.serialize('json',taken_quizzes)

您可以在使用某些数据填充额外内容之前执行此操作。

如ruhaib所述,您需要序列化数据。如果我不想为模型定义特殊的序列化程序,这就是我要做的

    from django.core import serializers

    taken_quizzes=....
    data=serializers.serialize('json',taken_quizzes)

您可以在使用某些数据填充额外内容之前执行此操作。

那么,您希望发生什么?dumps不知道queryset是什么,你必须给它一些它能理解的东西。那么,你想发生什么呢?json.dumps不知道queryset是什么,你必须给它它理解的东西。它说
模块“rest\u framework.serializers”没有属性“serialize”
,这是因为你在从rest\u framework调用“serializers”。您应该使用django.coreIt中的序列化程序。它说
模块“rest\u framework”。序列化程序没有属性“serialize”
,这是因为您正在从rest\u framework调用“serializers”。您应该使用django中的序列化程序。coreI创建了一个带有fields=“all”的新序列化程序但是当我使用它时,它会说:
AttributeError:get AttributeError当我试图在serializer
takenquizSerializer
`上获取字段
score`的值时,它会显示:
AttributeError:get AttributeError。但是我在我的模型中有分数,querysetI添加了serializer以及model.py。为了更好地理解,请更新代码(在您使用此序列化器的地方)还有,现在请看一看,这个错误似乎与我观察到的问题无关,但请试一试
takenquizzserializer(take_-quizzes,many=True)。数据
序列化程序通常序列化单个对象,但您正在将查询集传递给序列化程序。我创建了一个新的序列化程序,其中fields=“all”但是当我使用它时,它会说:
AttributeError:get AttributeError当我试图在serializer
takenquizSerializer
`上获取字段
score`的值时,它会显示:
AttributeError:get AttributeError。但是我在我的模型中有分数,querysetI添加了serializer以及model.py。为了更好地理解,请更新代码(在您使用此序列化器的地方)还有,现在请看一看,这个错误似乎与我观察到的问题无关,但请试一试
takenquizSerializer(take_-quizzes,many=True)。数据
序列化程序通常序列化单个对象,但您要将查询集传递给序列化程序。
    from django.core import serializers

    taken_quizzes=....
    data=serializers.serialize('json',taken_quizzes)