亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何配置viewsets.ModelViewSet以使用請求正文中傳遞的參數進行過濾。

如何配置viewsets.ModelViewSet以使用請求正文中傳遞的參數進行過濾。

斯蒂芬大帝 2023-06-27 18:25:39
我正在使用 DJANGO-REST-FRAMEWORK 構建 API。我試圖使用傳遞給請求正文的參數來過濾后端,這是我的設置:views.pyfrom .models import UsStatesGfrom .serializer import UsStatesSerializerfrom rest_framework import viewsetsfrom rest_framework.response import Responsefrom rest_framework.decorators import actionclass StatesViewSet(viewsets.ModelViewSet):    queryset = UsStatesG.objects.all()    serializer_class = UsStatesSerializer    @action(detail=False)    def get_by_id(self, request):        body = request.body.decode('utf-8')        body = json.loads(body)        state_list = UsStatesG.objects.filter(st_abbr__in=body['id'])        serializer = self.get_serializer(state_list, many=True)        return Response(serializer.data)models.pyclass UsStatesG(models.Model):    st_fips = models.CharField(primary_key=True, max_length=2, unique=True)    geom = models.MultiPolygonField(blank=False, null=False)    objectid = models.BigIntegerField(blank=False, null=False)    st_name = models.CharField(max_length=50, blank=False, null=False)    st_abbr = models.CharField(max_length=2, blank=False, null=False, unique=True)    class Meta:        managed = False        db_table = 'US_States_G'urls.pyfrom django.contrib import adminfrom django.urls import include, path, re_pathfrom api import viewsfrom rest_framework.routers import DefaultRouterrouter = DefaultRouter()router.register(r'states', views.StatesViewSet)router.register(r'states/q', views.StatesViewSet.get_by_id, basename='UsStatesG')urlpatterns = [    path('api/location/v1/', include(router.urls)),    serializer.pyfrom rest_framework_gis.serializers import GeoFeatureModelSerializerfrom .models import UsStatesG我想在請求正文中傳遞參數(隱私問題)即正文 {"id": ["TX", "CA"]}因為我對 DRF 還很陌生:1-這是一個好方法嗎?我是否使用了正確的視圖類(視圖集?)?2-過濾模型傳遞從請求正文中獲取的值的最佳(推薦方法)是什么?注意:我正在處理地理空間數據,一個 PostgreSQL-PostGIS Back-end 。我也在使用rest_framework_gis示例代碼將不勝感激,特別推薦 urls.py 和views.py 的代碼
查看完整描述

1 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

在你的 urls.py 中,你配置了一些錯誤的東西:

router.register(r'states/q', views.StatesViewSet.get_by_id, basename='UsStatesG')

您想要的視圖已包含在該行中:

router.register(r'states', views.StatesViewSet)

默認情況下端點是states/get_by_id/. 如果你希望端點是states/q,你可以在裝飾器中配置它@action。

@action(detail=False, url_path='q')


查看完整回答
反對 回復 2023-06-27
  • 1 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號