getまたは部分的な更新を実行しようとすると問題が発生するAPIエンドポイントがあります。私は何が紛失しているのか分からず、コードに試行錯誤を加えました。"detail"を返すDjango Rest Framework: "見つかりません"
エラー:
"detail": "Not found."
は、私の知る限り、URLを理解し、私は部分的に更新したいインスタンスのIDを含める必要があり、そうでPATCHを実行するためのURLは次のとおりです。
マイビュー:
class ManuscriptLibraryViewSet(viewsets.ModelViewSet):
"""Handles creating, reading and updating manuscript library."""
authentication_classes = (TokenAuthentication,)
serializer_class = serializers.ManuscriptLibrarySerializer
queryset = models.ManuscriptLibrary.objects.all()
permission_classes = (permissions.PostOwnManuscriptLibrary,)
def put(self, request, *args, **kwargs):
return self.partial_update(request, *args, **kwargs)
マイモデル:
class ManuscriptLibrary(models.Model):
"""Represents a single manuscript's library"""
manuscript = models.OneToOneField(ManuscriptItem, on_delete=models.CASCADE)
bookmarks = models.CharField(max_length=99999999)
history = models.CharField(max_length=99999999)
def __str__(self):
"""Django uses when it needs to convert the object to a string"""
return str(self.manuscript)
マイシリアライザ:
class ManuscriptLibrarySerializer(serializers.ModelSerializer):
"""A serializer for a manuscript's library."""
class Meta:
model = models.ManuscriptLibrary
fields = ('id', 'manuscript', 'bookmarks', 'history')
私のURL:
router = DefaultRouter()
router.register('manuscripts', views.ManuscriptViewSet, base_name="manuscripts") # auto basename for models
router.register('manuscriptlibrary', views.ManuscriptLibraryViewSet, base_name="manuscript_library")
router.register('manuscriptsettings', views.ManuscriptSettingsViewSet)
urlpatterns = [
url(r'', include(router.urls))
]
私の許可:
class PostOwnManuscriptLibrary(permissions.BasePermission):
"""Allow author to update a manuscript's library they own."""
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.manuscript.author == request.user
def has_permission(self, request, view):
if request.method == 'POST':
manuscript = request.data.get('manuscript')
instance = ManuscriptItem.objects.get(pk=manuscript)
return instance.author == request.user
return True
追加情報:
URL:
http://localhost:8000/manuscripts-api/manuscriptlibrary/
戻り値:パッチの
[ { "id": 28, "manuscript": 9, "bookmarks": "test success", "history": "test success" } ]
これは、ユーザが権限 'PostOwnManuscriptLibrary'によって所有者ではないことが原因である可能性があります –
メソッド更新のために私の許可を拡張する必要がありますかまたはパッチ? – NewScientists
あなたはちょうどpkでURLに乗っていれば大丈夫です、あなたはオブジェクトシリアライザを見ますか? –