ModelViewSet實現過濾和增刪改查

2021-10-10 18:53:05 字數 4160 閱讀 3914

from django.shortcuts import render

from django_filters.rest_framework import djangofilterbackend

from rest_framework import filters

from rest_framework.pagination import pagenumberpagination

from rest_framework.viewsets import modelviewset**

class

mypage

(pagenumberpagination)

: page_size_query_param =

'max_page'

page_query_param =

'page'

class

goodslistviewset

(viewsets.modelviewset)

:"""

list:

商品列表

read:

商品詳情

create:

增加商品

update:

更改商品

partial_update:

部分更改

delete:

刪除商品

"""# 必須定義乙個預設排序否則會報錯

queryset = goods.objects.

all(

).order_by(

'id'

)# 分頁

pagination_class = mypage

serializer_class = goodsserializer #展示序列化器所有資訊

# 過濾

filter_backends =

(djangofilterbackend, filters.searchfilter, filters.orderingfilter)

filter_class = goodsfilters

# 搜尋

search_fields =

('name'

,'goods_brief'

,'goods_desc'

)# 排序

ordering_fields =

('sold_num'

,'shop_price'

)

rest_framework =

,# 過濾器

'default_filter_backends':(

'django_filters.rest_framework.djangofilterbackend'

,'rest_framework.filters.orderingfilter'),

# 分頁

# 'default_pagination_class': 'rest_framework.pagination.pagenumberpagination',

# 'page_size': 3 # 每頁數目

}

view介面

#課程類別

class

coursetypeview

(modelviewset)

: queryset = coursetype.objects.

all(

)//獲取所有資料

serializer_class = coursetagser //序列化器,完成增刪改查

url路由頁面

routers = defaultrouter(

) 預設使用defaul路由

routers.register(

"type"

,coursetypeview) 註冊這個模型類

urlpatterns =

[ path(

'', include(routers.urls)),

#子路由配置

]

class

bookinfomodelviewset

(modelviewset)

: queryset = books.objects.

all(

) serializer_class =booksser

# 搜尋

search_fields=

('=title'

,'=desc'

)# 排序

ordering_fields =

('read'

,'pub_date'

) @action(methods=

['get'

],detail=

false

)#用get方法,不帶pk時候用false

defis_del

(self,request)

:#獲取刪除的圖書列表

queryset=self.queryset.

filter

(is_delete=

true

) ser=self.serializer_class(queryset,many=

true

)return jsonresponse(ser.data,safe=

false

) @action(methods=

['get'

], detail=

true

)#如果為true必須攜帶pk

defonly_title

(self,request,pk)

:#如果帶pk,self,中提供了根據pk獲取的那個物件

instance=self.get_object(

)#根據pk,獲取到的資料

data_dict =

return jsonresponse(data_dict)

@action(methods=

['get'

], detail=

false

)# 用get方法,不帶pk時候用false

defis_del

(self, request)

:# 獲取刪除的圖書列表

queryset = self.queryset.update(is_delete=

true

)#呼叫上面的獲取所有資料,然後吧資料全部修改為刪除狀態

ser = self.serializer_class(queryset, many=

true

)#序列化展示

return jsonresponse(

)

from django.urls import path

from rest_framework.routers import defaultrouter,******router #******router為簡單的路由展示

router=defaultrouter(

)#呼叫defaultrouter

router.register(

'books'

,bookinfomodelviewset)

#匯入url後面會自動生成/,呼叫view

urlpatterns=

[# path('books/',bookslistview.as_view()), #新增資料

# path('books//',bookslistview.as_view()), #查詢單個資料

# path('books/is_del/',booksinfoview.as_view()),

# path('booksinfo/is_del/',bookinfomodelviewset.as_view()),

# path('booksinfo//only_title/',bookinfomodelviewset.as_view())

]urlpatterns+=router.urls #拼接modelviewset裡的路由

print

(router.urls)

ModelViewSet使用指南

作用 可以實現增刪改查 簡化 但是 裡不可以有複雜的邏輯 如果有邏輯運算 需要使用apiview 使用 在view檢視中 1.導包 from rest framework.viewsets import modelviewset 2.在類中 呼叫 先例項化 要獲取的資料 然後 使用選擇序列化器 3....

ModelViewSet序列化,限流,排序

from rest framework import viewsets 導包 class userviewset viewsets.modelviewset 完成產品的增刪改插 queryset user.objects.all serializer class userserializer 優先使...

基於zabbix實現監控Jenkins過程詳解

一 監控架構圖 二 實現思路 三 具體配置 1 安裝jenkins metrics外掛程式 外掛程式 位址 安裝 metrics 外掛程式,在系統配置中,會多出 metrics 的配置,如下圖 配置項不複雜。我們需要點選 generate.生成乙個 access key 生成後,記得要儲存 這個 k...