代码之家  ›  专栏  ›  技术社区  ›  Tran Quoc Ung

TypeError:在/“module”对象处,Python rest_framework中不可调用

  •  0
  • Tran Quoc Ung  · 技术社区  · 1 年前

    我有一个简单的django_restframework项目,但我在下面遇到了一个错误。我不知道它为什么会出现的根本原因。我在哪里做错了吗?

    这是我的序列化程序 StorySerizer.py:

    from .models import Category, Story
    from rest_framework import serializers
    
    class StorySerializer(serializers.HyperlinkedModelSerializer):
        category = serializers.CharField(source='category.id')
        class Meta:
            model = Story
            fields = ['category', 'name', 'author', 'url', 'content']
    

    这是我的观点 视图.py

    class StoryviewSet(viewsets.ModelViewSet):
        """
        API endpoint that allows users to be viewed stories (or edited)
        """
    
        queryset = models.Story.objects.all().order_by('-public_day')
        serializer_class = StorySerializer
    
        permission_classes = [permissions.IsAuthenticatedOrReadOnly] 
    

    和URL urls.py

    ...
    from stories import views
    from rest_framework import routers
    
    router = routers.DefaultRouter()
    router.register(r'stories', views.StoryviewSet)
    
    urlpatterns = [
        ........
        path('api/', include(router.urls)),
        path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
    ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    设置.py

    INSTALLED_APPS = [
        .....
        'rest_framework',
    ]
    
    REST_FRAMEWORK = {
        'DEFAULT_PAGINATION_CLASS' : 'rest_framework.pagination.PageNumberPagination',
        'PAGE_SIZE' : 5,
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
        ]
    }
    

    但是当我调用API时,我得到了一个错误 错误

    > Internal Server Error: /api/stories/ Traceback (most recent call
    > last):   File
    > "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\django\core\handlers\exception.py",
    > line 55, in inner
    >     response = get_response(request)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\django\core\handlers\base.py",
    > line 197, in _get_response
    >     response = wrapped_callback(request, *callback_args, **callback_kwargs)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\django\views\decorators\csrf.py",
    > line 56, in wrapper_view
    >     return view_func(*args, **kwargs)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\rest_framework\viewsets.py",
    > line 125, in view
    >     return self.dispatch(request, *args, **kwargs)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\rest_framework\views.py",
    > line 509, in dispatch
    >     response = self.handle_exception(exc)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\rest_framework\views.py",
    > line 469, in handle_exception
    >     self.raise_uncaught_exception(exc)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\rest_framework\views.py",
    > line 480, in raise_uncaught_exception
    >     raise exc   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\rest_framework\views.py",
    > line 506, in dispatch
    >     response = handler(request, *args, **kwargs)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\rest_framework\mixins.py",
    > line 42, in list
    >     serializer = self.get_serializer(page, many=True)   File "D:\Projects\Python\Module_3\MyNews\venv\lib\site-packages\rest_framework\generics.py",
    > line 110, in get_serializer
    >     return serializer_class(*args, **kwargs) TypeError: 'module' object is not callable [10/Dec/2023 08:31:51] "GET /api/stories/
    > HTTP/1.1" 500 108765
    

    请帮我修一下。。。。

    谢谢提前

    1 回复  |  直到 1 年前
        1
  •  0
  •   Siddharth Sutar    1 年前

    在里面 StorySerializer.py ,如果导入正确,则该字段 category = serializers.CharField(source='category.id') 如果类别是外键,则可能导致错误&类别是故事模型中的另一个模型。你可能想使用 PrimaryKeyRelatedField 而不是 serializers.CharField

    class StorySerializer(serializers.HyperlinkedModelSerializer):
        category = serializers.PrimaryKeyRelatedField(queryset=Category.objects.all())
        
        class Meta:
            model = Story
            fields = ['category', 'name', 'author', 'url', 'content']
    

    这将把类别外键表示为主键相关字段。若类别不是外键,那个么原始参数是正确的。

    还要确保 StorySerializer 在顶部正确导入 views.py

    from .StorySerializer import StorySerializer
    

    这假设 StorySerializer 在名为StorySerializer.py的文件中定义,该文件与 视图.py 文件

    应该就这些了!