Python 错误:Django Rest框架中的ModelViewSet不接受PUT或PATCH方法,但接受GET和POST
这是一个交付项目的用餐应用程序的视图,我使用的是Django和Django Rest框架。我正在尝试更新一个MEIN实例,但视图中不允许使用PUT和PATCH方法。url正在工作(已在GET和POST中使用),请求数据已正确发送 我的错误是什么 邮递员中显示的错误消息:Python 错误:Django Rest框架中的ModelViewSet不接受PUT或PATCH方法,但接受GET和POST,python,django,django-rest-framework,django-rest-viewsets,Python,Django,Django Rest Framework,Django Rest Viewsets,这是一个交付项目的用餐应用程序的视图,我使用的是Django和Django Rest框架。我正在尝试更新一个MEIN实例,但视图中不允许使用PUT和PATCH方法。url正在工作(已在GET和POST中使用),请求数据已正确发送 我的错误是什么 邮递员中显示的错误消息: { "detail": "Method \"PATCH\" not allowed." } views/Founds.py代码: '''Meal views.''' # Django REST Framework f
{
"detail": "Method \"PATCH\" not allowed."
}
views/Founds.py代码:
'''Meal views.'''
# Django REST Framework
from rest_framework import mixins, status, viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.generics import get_object_or_404
# Serializers
from meals.serializers import MealModelSerializer
# Models
from meals.models import Meal
from users.models import Store
class MealViewSet(mixins.ListModelMixin,
mixins.CreateModelMixin,
mixins.UpdateModelMixin,
mixins.RetrieveModelMixin,
mixins.DestroyModelMixin,
viewsets.GenericViewSet):
'''Meals view set.
#################################################################################
Http methods and the URLs:
GET /stores/<store_slugname>/meals/ (list Store meals)
POST /stores/<store_slugname>/meals/ (create Stores meal)
######################################################################################
'''
serializer_class = MealModelSerializer
lookup_field = 'slugname'
search_fields = ('slugname', 'name')
# Method call every time this MealViewSet is instanced
def dispatch(self, request, *args, **kwargs):
'''Verify that the store exists.
Add the URL input <store_slugname> to the Meal model field store(FK).
'''
store_slugname = kwargs['store_slugname']
self.store = get_object_or_404(Store, store_slugname=store_slugname)
return super(MealViewSet, self).dispatch(request, *args, **kwargs)
def get_queryset(self):
'''Get Store's available meals'''
return Meal.objects.filter(
store=self.store,
is_available=True
)
def create(self, request, *args, **kwargs):
'''Assign Meal to a Store (received in the URL input <store_slugname>)
'''
store = self.store # Got from the dispatcher
request.data['store'] = store.id
serializer = MealModelSerializer(
data=request.data
)
serializer.is_valid(raise_exception=True)
serializer.save()
data = serializer.data
return Response(data, status=status.HTTP_201_CREATED)
“用餐视图”
#Django REST框架
从rest_框架导入混合、状态、视图集
从rest_framework.decorators导入操作
来自rest\u framework.response导入响应
从rest\u framework.generics导入get\u object\u或\u 404
#序列化程序
从Founds.Serializer导入MealModelSerializer
#模型
从餐点。模型导入餐点
从users.models导入存储
类MealViewSet(mixins.ListModelMixin,
mixin.CreateModelMixin,
mixin.UpdateModelMixin,
mixin.RetrieveModelMixin,
mixin.DestroyModelMixin,
ViewSet.GenericViewSet):
''膳食视图集。
#################################################################################
Http方法和URL:
获取/存储//膳食/(列出存储膳食)
邮政/门店//餐饮/(创建门店餐饮)
######################################################################################
'''
序列化器_class=MealModelSerializer
查找_字段='slugname'
搜索字段=('slugname','name')
#每次实例化此MealViewSet时调用方法
def调度(自我、请求、*args、**kwargs):
''验证存储是否存在。
将URL输入添加到膳食模型字段存储(FK)。
'''
store\u slugname=kwargs['store\u slugname']
self.store=get\u object\u或\u 404(store,store\u slugname=store\u slugname)
返回super(MealViewSet,self).dispatch(请求,*args,**kwargs)
def get_queryset(自我):
“获取商店提供的膳食”
return.objects.filter(
store=self.store,
可用吗=真
)
def创建(self、request、*args、**kwargs):
''将膳食分配给商店(在URL输入中接收)
'''
store=self.store#从调度程序获取
request.data['store']=store.id
序列化器=MealModelSerializer(
data=request.data
)
serializer.is\u有效(raise\u exception=True)
serializer.save()
data=serializer.data
返回响应(数据,状态=status.HTTP\u 201\u已创建)
膳食/url.py
router = DefaultRouter()
router.register(
r'stores/(?P<store_slugname>[a-zA-Z0-9]+)/meals',
meals_views.MealViewSet,
basename='meals'
)
urlpatterns = [
path('', include(router.urls))
]
路由器=默认路由器()
路由器寄存器(
r'stores/(?P[a-zA-Z0-9]+)/Founds',
餐饮_views.MealViewSet,
basename='Founds'
)
URL模式=[
路径(“”,包括(router.url))
]
如何在url.py
中声明url?使用ModelViewSet
时,我建议使用DefaultRouter
如何在urls.py
中声明url?使用ModelViewSet
时,我建议使用DefaultRouter