2013-05-29 80 views
3

我想對用於序列化查詢集的類使用過濾器。我構建了以下過濾器:使用序列化器過濾。模型序列化器

# define a filterset 
class commentFilter(django_filters.FilterSet):  
    class Meta: 
     model = comment 
     fields = ['tag', 'title'] 

隨着通用視圖,這工作得很好,我可以使用篩選此:?tag=23

# generic view 
class CommentsAll(generics.ListAPIView): 
    model = comment 
    serializer_class = CommentSerializer 
    filter_class = commentFilter   

但是對於非一般的看法,我不能得到的濾波函數來工作(但數據被返回)。唯一的區別是我看到的是我正在使用serializers.ModelSerializer。是否有某種方法可以對這類類進行過濾工作?我的視圖返回的模型數據的查詢集與通用視圖中使用的數據相同。

# non generic 
class CommentSerializer(serializers.ModelSerializer):  
    count = serializers.Field(source='subcomments') 
    score = serializers.Field(source='score') 
    upvotes = serializers.Field(source='upvotes')  

    class Meta:  
     model = comment  
     fields = ('title', 'comment', 'tag', 'created', 'count', 'score', 'upvotes',)   

    filter_class = commentFilter 

回答

1

通用視圖構建在篩選和分頁行爲中,因爲它們可以將該行爲掛鉤到他們創建和返回數據查詢集的標準方式。如果您正在編寫自己的視圖,則需要自行應用任何過濾。

看一看'GenericAPIView'的實現,特別是'filter_queryset'方法來了解如何去做。

+0

謝謝湯姆(並感謝一個偉大的API框架!)。我在'GenericAPIView'上注意到的唯一過濾器方面是'filter_backends = api_settings.DEFAULT_FILTER_BACKENDS'我是否需要在我的類中指定確保以相同方式進行過濾? – djq

相關問題