Причина root этой проблемы в том, что вы пытаетесь обновить словарь списком.
Минимальный код для имитации этой проблемы:
d = {1: "one", 2: "three"}
d.update([(1,)])
выдаст ошибку of
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
запись, в зависимости от вашего конкретного варианта использования.
- ИЗМЕНИТЬ -
Если вы хотите, чтобы все записи 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