簡體   English   中英

在 django 序列化程序 class 中僅序列化查詢集中的某些字段

[英]serializing only certain fields from a queryset in django serializer class

我有一個從get_queryset()獲得的查詢集。 我們知道的是,queryset 的返回給出了包含 model 的所有字段的對象列表。 現在我不想序列化 model 中的所有字段並在響應中顯示所有字段。 我只想序列化幾個字段並在 api 響應中顯示。

例如:

def get_queryset(self):

    """""
        filtering happens here on the query parameters.
    """
    abc = self.request.GET.get('abc',None)

現在我有一個默認列表 function ,我必須在其中僅使用特定字段調用序列化程序 class 。

def list(self, request, *args, **kwargs):
    
    queryset = self.get_queryset()
    # data ={
    #     "name":queryset.
    # }
    
    # serializer = ExampleSerializer(data,many=True)
    #serializer = serializers.serialize("json",queryset=queryset,fields=['id','name','address'])        
    return Response(serializer, status=status.HTTP_200_OK)

當我打印查詢集時,它給出了復雜的查詢集,當我print(type(queryset))時,它給出了以下內容

<class 'django.db.models.query.QuerySet'>

現在如何僅將名稱和地址字段序列化到示例序列化器 class? 我做了一些挖掘並嘗試執行以下操作

#serializer = serializers.serialize("json",queryset=queryset,fields=['id','name','address'])

但它不像常規 json 那樣提供所需格式的 output。 它還給出了 model:每個 object 響應中的示例。

你試過這個嗎?

queryset = self.get_queryset().values('name', 'address')

我不確定我是否完全理解您要獲取的內容,因為您的代碼不完整,但似乎您需要的是ModelSerializer
由於 DRF inheritance 和 mixins 系統, get_queryset()應該用於檢索序列化程序將使用的對象查詢集:

# Serializer
class ExampleSerializer(serializers.ModelSerializer):

    class Meta:
        model = Example
        fields = ('id', 'name', 'address')

# View
class ExampleList(ListAPIView):
    serializer_class = ExampleSerializer

    def get_queryset(self):
        return Example.objects.filter(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM