简体   繁体   English

django“详细信息”:“方法\\”GET\\“不允许。” (一对多关系)

[英]django “detail”: “Method \”GET\“ not allowed.” (one to many relationship)

models.py模型.py

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=64)

class Games(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    game = models.CharField(max_length=128)

serializers.py序列化程序.py

from rest_framework import serializers
from . import models

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.User
        fields = '__all__'

class GameSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Games
        fields = '__all__'

views.py视图.py

from django.shortcuts import render
from . import models
from . import serializers
from rest_framework import generics, status
from rest_framework.views import APIView
from rest_framework.response import Response

class UserView(generics.ListCreateAPIView):
    queryset = models.User.objects.all()
    serializer_class = serializers.UserSerializer

class CreateUser(APIView): # this works just fine
    def post(self, request):
        serializer = serializers.UserSerializer(data= request.data)
        if serializer.is_valid():
            username = serializer.data.get('username')

            queryset = models.User.objects.filter(username)
            if queryset.exists():
                user = queryset[0]
                user.username = username

                user.save(update_fields=['username'])
            else:
                user = models.User.objects.create(username=username)
                user.save()
                return Response(serializers.UserSerializer(user).data, status=status.HTTP_200_OK)
            return Response({'BAD REQUEST': 'INVALID DATA'}, status=status.HTTP_400_BAD_REQUEST)

class CreateGame(APIView): # this is causing problems
    def post(self, request):
        serializer = serializers.GameSerializer(data= request.data)
        if serializer.is_valid():
            game = serializer.data.get('game')
            user = serializer.data.get('user')
            
            game = models.Games.objects.create(user=user, game=game)
            game.save()
            return Response(serializers.GameSerializer(game).data, status=status.HTTP_200_OK)
        return Response({'BAD REQUEST': 'INVALID DATA'}, status=status.HTTP_400_BAD_REQUEST)

urls.py网址.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.UserView.as_view(), name='view'),
    path('user', views.UserView.as_view(), name='user-view'),
    path('game', views.CreateGame.as_view(), name='create-game')
]

Basically I have 2 models, the User and Game model, I want there to be 1 user that has many games which is why the Game model has a foreign key attached to User, but for some reason it is causing problems in the APIView and returns a 405 not allowed error(at /game)... how can i fix this?基本上我有 2 个模型,User 和 Game 模型,我希望有 1 个用户有很多游戏,这就是为什么 Game 模型有一个附加到 User 的外键,但由于某种原因它导致 APIView 出现问题并返回一个 405 不允许的错误(在 /game)...我该如何解决这个问题?

APIView you've implemented has only post() method and get() is unimplemented, therefore you receive such an error.您实现的APIView只有post()方法,而get()未实现,因此您会收到这样的错误。 You receive the error because APIView abstracts some parts of the Request and Response handling, but it won't do everything automatically unlike ListCreateAPIView and other generic views .您收到错误是因为APIView抽象了RequestResponse处理的某些部分,但与ListCreateAPIView和其他 通用视图不同,它不会自动执行所有操作。

class CreateGame(APIView): # this is causing problems
    def post(self, request)  # here

Either change to get() if you want to use GET HTTP method or use POST HTTP method instead.如果要使用GET HTTP 方法或改用POST HTTP 方法,请更改为get()

Or better, simply use the ListCreateAPIView and override the post() or create() method .或者更好的是,只需使用ListCreateAPIView并覆盖post()create()方法 That way you'll have only slight changes instead of custom APIView .这样你只会有轻微的变化,而不是自定义APIView

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 { "detail": "方法 \\"GET\\" 不允许。" } - { "detail": "Method \"GET\" not allowed." } "detail": "方法 \\"GET\\" 不允许。" 在 TokenAuthentication Django 休息框架中 - "detail": "Method \"GET\" not allowed." in TokenAuthentication Django rest framework "detail": "方法 \"GET\" 不允许。" Django Rest 框架 - "detail": "Method \"GET\" not allowed." Django Rest Framework “详细信息”:“方法 \\”GET\\” 不允许。在 Django 中调用端点 - “detail”: “Method \”GET\" not allowed. on calling endpoint in django “详细信息”:“方法 \”GET\“ 不允许。” Django Rest 框架 - “detail”: “Method \”GET\“ not allowed.” Django Rest Framework DRF:“详细信息”:“方法\\” GET \\“不允许。” - DRF: “detail”: “Method \”GET\“ not allowed.” POST 返回“详细信息”:“不允许使用方法 \"GET\"。” - POST returns "detail": "Method \"GET\" not allowed." "detail": "方法 \\"POST\\" 不允许。" - "detail": "Method \"POST\" not allowed." Restangular删除不工作(是:DJANGO:{“detail”:“方法'删除'不允许。”}) - Restangular remove not working (was: DJANGO: {“detail”: “Method 'DELETE' not allowed.”}) Django REST 框架 - “方法 \”GET\“ 不允许。” - - Django REST framework - “Method \”GET\“ not allowed.” -
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM