Python 错误:Django Rest框架中的ModelViewSet不接受PUT或PATCH方法,但接受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

这是一个交付项目的用餐应用程序的视图,我使用的是Django和Django Rest框架。我正在尝试更新一个MEIN实例,但视图中不允许使用PUT和PATCH方法。url正在工作(已在GET和POST中使用),请求数据已正确发送

我的错误是什么

邮递员中显示的错误消息:

{
    "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