【问题标题】:Problem with serializing object field Django序列化对象字段Django的问题
【发布时间】:2021-04-19 14:12:19
【问题描述】:

我不是 Django REST Framework 的新手,但仍然不了解序列化方面的一些内容。 例如,我需要序列化一个对象字段,它也是一个对象。从这个对象字段我只需要一个字段(例如“标题”)。我知道,那可能是为了解决我的项目而创建以下内容:

class CarSerializer(serializers.ModelSerializer):
    class Meta:
        model = Car
        fields = ('id', 'title')


class GarageSerializer(serializers.ModelSerializer):
    class Meta:
        depth = 1
        model = Garage
        fields = ('id', 'title', 'address', 'car_set')

    car_set = CarSerializer(many=True)

这个序列化器会返回

{
    "id": 1,
    "title": "MyGarage",
    "address": "Paris",
    "car_set": [
        {
            "id": 1,
            "title": "Lamborghini"
        }
    ]
}

但我想找到方法如何指向子字段的字段,如下所示:

Car.objects.filter(garage__title='MyGarage') 

我该怎么做?

【问题讨论】:

    标签: django django-models serialization django-rest-framework


    【解决方案1】:

    根据文档,我认为您可以使用 get_queryset 函数在视图中执行此操作:

    https://www.django-rest-framework.org/api-guide/filtering/ 
    

    示例:

    class PurchaseList(generics.ListAPIView):
    serializer_class = PurchaseSerializer
    
        def get_queryset(self):
            """
            Optionally restricts the returned purchases to a given user,
            by filtering against a `username` query parameter in the URL.
            """
            queryset = Purchase.objects.all()
            username = self.request.query_params.get('username')
            if username is not None:
                queryset = queryset.filter(purchaser__username=username)
            return queryset
    

    【讨论】:

    • 谢谢@taha,但它不起作用。因为使用这个函数,我们可以对查询集进行排序或过滤,但不能更改字段。我认为是序列化程序的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2010-12-09
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多