Как сделать QuerySet JSON сериализуемым? - PullRequest
0 голосов
/ 22 июня 2019

У меня проблема с созданием нового объекта в 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')

1 Ответ

0 голосов
/ 23 июня 2019
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)

... и внутри метода создания (пост в 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]
...