![](/img/trans.png)
[英]Django,update the same row field in model getting data from serializer
[英]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.