首页 > 解决方案 > / 处的 TypeError 只能将 str(不是“builtin_function_or_method”)连接到 str

问题描述

感谢您的时间。

我正在研究 django rest 框架文档,并且只有使用 Localhost "http://127.0.0.1:8000/" URL 我收到此错误。

/ 处的 TypeError 只能将 str(不是“builtin_function_or_method”)连接到 str

我附上了 Views.py、snippets/url.py 和 snippets/serializers.py

视图.py

from snippets.permissions import IsOwnerOrReadOnly
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer, UserSerializer
from rest_framework import generics, permissions    
from django.contrib.auth.models import User
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import renderers
from rest_framework.reverse import reverse


@api_view(['GET']
def api_root(request, fromat=None):
    return Response({
        'users': reverse('user-list', request=request, format=format),
        'snippets': reverse('snippet-list', request=request, format=format)
})

class SnippetHighlight(generics.GenericAPIView):
    queryset = Snippet.objects.all()
    renderer_classes = [renderers.StaticHTMLRenderer]

    def get(self, request, *args, **kwargs):
        snippet = self.get_object()
        return Response(snippet.highlighted

class SnippetList(generics.ListCreateAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
         serializer.save(owner=self.request.user)

class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly]

class UserList(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class UserDetail(generics.RetrieveAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

片段/urls.py

from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views


urlpatterns = format_suffix_patterns([
    path('', views.api_root),

    path('snippets/', views.SnippetList.as_view(), name='snippet-list'),
    path('snippets/<int:pk>/', views.SnippetDetail.as_view(), name='snippet-detail'),
    path('snippets/<int:pk>/highlight/', views.SnippetHighlight.as_view(), name='snippet- 
    highlight'),

    path('users/', views.UserList.as_view(), name='user-list'),
    path('users/<int:pk>/', views.UserDetail.as_view(), name='user-detail')
])

序列化程序.py

from rest_framework import serializer
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
from django.contrib.auth.models import User


class SnippetSerializer(serializers.HyperlinkedModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')
    highlight = serializers.HyperlinkedIdentityField(view_name='snippet-highlight', 
    format='html')

    class Meta:
        model = Snippet
        fields = ['url','id','highlight', 'owner' ,'title', 'code', 'linenos', 'language', 
        'style']
    
    
class UserSerializer(serializers.ModelSerializer):
    snippets = serializers.HyperlinkedIdentityField(many=True, view_name='snippet-detail', 
    read_only=True)

    class Meta:
         model = User
         fields = ['url', 'id', 'username', 'snippets']     
    

在此处输入图像描述

不管这一切都工作得很好,比如http://127.0.0.1:8000/snippets/ 在此处输入图像描述

标签: djangodjango-rest-frameworkdjango-views

解决方案


推荐阅读