我试图向我的序列化数据添加一个字典,但我得到一个错误的信息 dictionary update sequence element #0 has length 6; 2 is required
这是我试过的。
def get_data(self, request):
created_by = User_Detail.objects.get(auth_token__isnull=False)
newdict = {'created_by': created_by.id}
details = ExSerializer(Tower.objects.all(), many=True).data
newdict.update(details)
return Response({"expenses": newdict})
我试过上面的 编码 但对我来说,它不工作。
这个问题的根本原因是你试图用列表更新一个字典。
模拟这个问题的最小代码。
d = {1: "one", 2: "three"}
d.update([(1,)])
会给出一个错误
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
d.update([(1,)])
ValueError: dictionary update sequence element #0 has length 1; 2 is required
对于您的情况,您正在更新 newdict
列表来自 ExSerializer
(Tower.objects.all()
与 many=True
).
为了解决这个问题,你需要调整你的代码,只从 Tower
,或者将每个用户的结果合并成一个列表。Tower
记录,取决于你的具体使用情况。
-- EDIT --
如果你想要所有的记录 Tower
在一个请求中,你将需要应用多个序列器。
代码将与此类似(未测试)。
def get_data(self, request):
created_by = User_Detail.objects.get(auth_token__isnull=False)
return Response({"expenses": UserDetailSerializer({"created_by": created_by}).data})
class UserDetailSerializer(serializers.ModelSerializer):
created_by = serializers.IntegerField()
details = serializers.SerializerMethodField()
class Meta:
model = User_Detail
fields = ('created_by', 'details')
def get_details(self, obj):
return ExSerializer(Tower.objects.all(), many=True).data