首页 > 解决方案 > 从序列化程序中的对象获取更多信息,而不仅仅是 id

问题描述

我有一个运行良好的序列化程序和视图,现在唯一的问题是我希望能够获取它包含的全部数据以及 ID 号。我来给你展示:

这是我的看法:

@api_view(['GET'])
def TicketListView(request, *args, **kwargs):
    queryset = Order.objects.filter(ordered=True)
    username = request.GET.get('username')
    if username != None:
        queryset = queryset.by_username(username)
    # serializer = PostSerializer(queryset, many=True)
    serializer = TicketListSerializer(
        queryset, many=True, context={'request': request})
    return Response(serializer.data, status=200)

序列化器:

class TicketListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'

这是输出:

[
    {
        "id": 2,
        "ref_code": "42764745463765476",
        "start_date": "2021-02-24T01:23:27.135638Z",
        "ordered_date": "2021-02-24T01:23:13Z",
        "ordered": true,
        "being_delivered": false,
        "received": false,
        "refund_requested": false,
        "refund_granted": false,
        "transaction_id": "w4234",
        "qr_code": "http://127.0.0.1:8000/media/qrcode/qr_code-42764745463765476_zaqc1a7.png",
        "user": 1,
        "shipping_address": null,
        "billing_address": null,
        "payment": 1,
        "coupon": null,
        "items": [
            2,
            1
        ]
    }
]

现在,我希望它显示它包含的实际数据,而不是items显示。[2,1]1

"item": {
                "id": 1,
                "category": "Music",
                "label": "PopSocial",
                "likess": 0,
                "title": "fe",
                "caption": "asfwa",
                "photo": "/media/posts/Premium_SUndays_XhustW8.jpg",
                "date_of_event": "2021-02-24T01:15:10Z",
                "location": "SRID=4326;POINT (5.712891 7.885147)",
                "latitude": "7.885147",
                "longitude": "5.712891",
                "date_posted": "2021-02-24T01:15:11Z",
                "likes": 0,
                "price": "10000.00",
                "discount_price": 343.0,
                "digital": false,
                "slug": "11",
                "author": 1,
                "bookmark": []
            },
            "final_price": 686.0,

标签: djangodjango-rest-framework

解决方案


第一种方式:您可以在序列化程序中使用depth=1。这是来自官方 Django Rest Framework 的文档 https://www.django-rest-framework.org/api-guide/serializers/#specifying-nested-serialization

第二种方式:您可以在您的 TicketListSerializer 中定义您的 ItemSerializer,然后从 ItemSerializer 中调用项目。


推荐阅读