Как добавить список объектов в сериализованные данные? в рамках Джанго Отдых - PullRequest
0 голосов
/ 16 марта 2019

У меня есть следующий вывод в настоящее время.

{
    "carts": [
        {
            "id": 1,
            "product_id": 1,
            "description": null,
            "default": "Yes"
        }
    ],
    "categories": [
        {
            "id": 1,
            "name": "Indoor Muscle Training",
            "description": null
        },
        {
            "id": 2,
            "name": "Outdoor Muscle Training",
            "description": null
        }
    ]
}

И я хочу добавить несколько объектов, как показано ниже.Эти продукты должны быть статическими прямо сейчас.

{
        "carts": [
            {
                "id": 1,
                "product_id": 1,
                "description": null,
                "default": "Yes"
            }
        ],
        "categories": [
            {
                "id": 1,
                "name": "Indoor Muscle Training",
                "description": null,
                "products":[
                 { 
                    "id":1,
                    "name":"Product One"
                 },
                 { 
                    "id":2,
                    "name":"Product Two"
                 }
                ]
            },
            {
                "id": 2,
                "name": "Outdoor Muscle Training",
                "description": null,
                "products":[
                 { 
                    "id":1,
                    "name":"Product One"
                 },
                 { 
                    "id":2,
                    "name":"Product Two"
                 }
                ]
            }
        ]
    }

Вот мои текущие файлы views.py

def home(request):
    if request.method == 'GET':
        default_cart = DefaultCart.objects.all()
        categories = Category.objects.filter(parent_id=0)
        serialized_default_cart = DefaultCartSerializer(default_cart, many=True)
        serialized_categories = CategorySerializer(categories, many=True)
        return Response({
            'carts':serialized_default_cart.data,
            'categories':serialized_categories.data,
        })

serializers.py

class DefaultCartSerializer(serializers. HyperlinkedModelSerializer):    
    class Meta:        
        model = DefaultCart        
        fields = (
            'id',
            'product_id',
            'description',
            'default'
        )   

class CategorySerializer(serializers. HyperlinkedModelSerializer):   
    class Meta:        
        model = Category        
        fields = (
            'id', 
            'name', 
            'description',
        )   

Эти продукты должныДобавим статические значения прямо сейчас.Позже я буду применять вложенный сериализатор, определяя отношение «многие ко многим» между продуктом и категорией

1 Ответ

0 голосов
/ 16 марта 2019

Вы можете использовать SerializerMethodField :

class CategorySerializer(serializers. HyperlinkedModelSerializer):   
    products = serializers.SerializerMethodField()

    class Meta:        
        model = Category        
        fields = (
            'id', 
            'name', 
            'description',
            'products'
        )   

    def get_products(self, obj):
        return [
             { 
                "id":1,
                "name":"Product One"
             },
             { 
                "id":2,
                "name":"Product Two"
             }
        ]
...