django - 如何使用动作装饰器进行更新?
问题描述
我需要使用动作装饰器更新我的端点。进行更新操作的更好方法是什么?
我有两个序列化程序:
class GarageViewSet(viewsets.ModelViewSet):
queryset = Garage.objects.all()
serializer_class = GarageSerializer
model = Garage
class CarViewSet(RestrictedQuerysetMixin, viewsets.ModelViewSet):
queryset = Car.objects.all()
serializer_class = CarSerializer
filter_backends = (DjangoFilterBackend,)
filterset_fields = ('color', 'model')
model = Car
我需要通过“汽车”接收列表有效负载并通过操作更新“车库”。我正在尝试这样的事情:
class GarageViewSet(viewsets.ModelViewSet):
queryset = Garage.objects.all()
serializer_class = GarageSerializer
model = Garage
@action(detail=True, methods=['put'])
def update_car(self, request):
queryset = Car.objects.create()
serializer = CarSerializer(queryset, many=True)
return Response(serializer.data)
我的网址文件:
from django.urls import path, include
from django.conf.urls import url
from rest_framework.routers import DefaultRouter
from rest_framework.documentation import include_docs_urls
from .views import garage
router = DefaultRouter()
router.register(r"garage", garage.GarageViewSet, base_name="car")
router.register(r"car", garage.CarViewSet, base_name="car")
urlpatterns = [
url(r"^", include(router.urls))
]
有效载荷示例:
{
"fuel": 2,
"model": 2,
"color": null,
}
有没有人知道动作更新的想法?
解决方案
首先,纠正你的缩进,
class GarageViewSet(viewsets.ModelViewSet):
queryset = Garage.objects.all()
serializer_class = GarageSerializer
model = Garage
@action(detail=True, methods=['put'])
def update_car(self, request):
queryset = Car.objects.create()
serializer = CarSerializer(queryset, many=True)
return Response(serializer.data)
然后,将视图类添加到您的urls.py
as,
path('path/to/your/put/operation/', GarageViewSet.as_view({"put": "update_car"}), name='any-name-you-like'),
更新 1
#urls.py
from django.urls import path, include
from django.conf.urls import url
from rest_framework.routers import DefaultRouter
from rest_framework.documentation import include_docs_urls
from .views import garage
router = DefaultRouter()
router.register(r"garage", garage.GarageViewSet, base_name="car")
router.register(r"car", garage.CarViewSet, base_name="car")
urlpatterns = [
path('garage/<int:pk>/update-card/', GarageViewSet.as_view({"put": "update_car"}), name='any-name-you-like'),
] + router.urls
推荐阅读
- javascript - 我怎样才能有一个基于 data.record 的嵌套对象的可排序列?
- javascript - 应用程序未找到 JavaScript 文件
- elasticsearch - 弹性搜索云 - 为重新索引添加 ca
- vba - 使用其他列 VBA 验证列中的日期格式
- android - 为什么我的应用程序在实例化助手类时崩溃?
- powershell - PowerShell 自定义模块清单不公开声明的函数
- c++ - 询问指向数组的指针是真还是假是什么意思?
- python - 在字符串中查找最长的数字子序列
- reactjs - 如何使用带有现有按钮的 react material-ui 快餐栏?
- python - 如何通过 Python Scrapy 蜘蛛解析嵌入的链接