Django RESTful framework 筆記

在serializer 中使用 request

重寫get_queryset

router.register(r'^assistant', views.Assistant, basename='ClientUserinfo')

class Vuls(mixins.ListModelMixin,
                 GenericViewSet):
    """
    list:
        Return vuls which user managed.
    """

    serializer_class = ClientVulSerializer
    filter_backends = (filters.SearchFilter,)
    search_fields = ('vul_id', 'vul_addr',)

    def get_queryset(self):
        queryset = ScanResult.objects.using("socDB").filter(source=1)
        if not self.request.user.is_superuser:
            queryset = queryset.filter(username=self.request.user.username)
        return queryset

retrieve 取URL(GET)參數(shù)

RESTful 沒有kv, 取slug的方法為:

    def retrieve(self, request, *args, **kwargs):
        kwargs.get('pk')

retrieve 跨表取內(nèi)容

retrieve方法默認(rèn)會(huì)根據(jù)主鍵查找數(shù)據(jù), 多用于詳情頁, 如需使用其他字段查找, 可通過定義lookup_field來實(shí)現(xiàn), 如有更復(fù)雜的需求, 也可以重寫方法

class ClientInfoSerializer(serializers.ModelSerializer):

    class Meta:
        model = ClientUserinfo
        fields = '__all__'
        extra_kwargs = {'url': {'lookup_field': 'fingerprint'}}
class Assistant(ModelViewSet):

    serializer_class = ClientInfoSerializer
    lookup_field = "fingerprint"

    def get_queryset(self):
        queryset = ClientUserinfo.objects.using("socDB").filter(username=self.request.user.username).order_by(
            "-install_time")
        return queryset

    def retrieve(self, request, *args, **kwargs):
        fingerprint = self.get_object().fingerprint
        instance = ClientActiveinfo.objects.using("socDB").filter(fingerprint=fingerprint)
        serializer = ClientActiveInfoSerializer(instance, many=True)
        return Response(serializer.data)

博客文章遷移: 2019-08-01 21:31

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容