簡體   English   中英

更新 Django 中的序列化程序數據

[英]Update serializer data in Django

我正在嘗試將字典添加到我的序列化數據中,但出現錯誤dictionary update sequence element #0 has length 6; 2 is required 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的列表( Tower.objects.all()many=True )更新ExSerializer

為了解決這個問題,您需要調整代碼以僅從Tower中提取一條記錄,或者制作一個將每個用戶組合到一條Tower記錄的結果列表,具體取決於您的確切用例。

- 編輯 -

如果您想要一個請求中的所有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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM