【问题标题】:How to make QuerySet JSON serializable?如何使 QuerySet JSON 可序列化?
【发布时间】:2019-11-05 05:18:19
【问题描述】:

在我的 Rest Framework 中创建新对象时遇到问题。

据我所知,当我试图覆盖项目的字段时,它可以包含我数据库中的所有项目。我想,这会起作用,它向我展示了工作页面,我可以选择一个项目。但是当我试图发布它来创建一个新对象时,它说“'Item'类型的对象不是JSON可序列化的”

我试图弄清楚如何将Item.objects.all() 转换为 JSON 数据。但没有任何帮助。我明白,这并不难做到,但我自己无法弄清楚。

所以我请求你的帮助,如何解决这个问题?

这是我的序列化程序

from rest_framework import serializers
from items.models import OrderItem, Item

class OrderItemSerializer(serializers.ModelSerializer):
    item = serializers.ChoiceField(choices=Item.objects.all())
    class Meta:
        model = OrderItem 
        fields = ('item', 'size', 'quantity', 'id')

【问题讨论】:

标签: json django serialization django-rest-framework django-queryset


【解决方案1】:
from rest_framework import serializers
from items.models import OrderItem, Item

class OrderItemSerializer(serializers.ModelSerializer):
    item = serializers.SerializerMethodField()
    class Meta:
        model = OrderItem 
        fields = ('item', 'size', 'quantity', 'id')

    def get_item (self, obj):
        # in value list name all fields u want or empty for defaults 
        return Item.objects.all().values_list('pk', flat=True)

... 并在 create 方法中(在 Serializer 中发布) ...

    def create(self, validated_data):
        req = self.context.get('request')
        items = req.data.get('item')
        if items:
            [OrderItem.item.add(
                oneitem) for oneitem in items]

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 2019-06-17
    • 2014-02-04
    • 1970-01-01
    • 2011-04-15
    • 2020-07-18
    • 2020-03-04
    相关资源
    最近更新 更多