【问题标题】:AssertionError at /posts/ 'PostList' should either include a `queryset` attribute, or override the `get_queryset()` method/posts/ 'PostList' 处的 AssertionError 应包含 `queryset` 属性,或覆盖 `get_queryset()` 方法
【发布时间】:2017-04-04 22:15:19
【问题描述】:
ERROR in url==http://127.0.0.1:8000/posts/
 D:\Priyanka_Angular1\virtual_env\django-angular\lib\site-packages\rest_framework\views.py in dispatch

                response = self.handle_exception(exc)

     ...

▶ Local vars
D:\Priyanka_Angular1\virtual_env\django-angular\lib\site-packages\rest_framework\views.py in handle_exception

                self.raise_uncaught_exception(exc)

     ...

▶ Local vars
D:\Priyanka_Angular1\virtual_env\django-angular\lib\site-packages\rest_framework\views.py in dispatch

                response = handler(request, *args, **kwargs)

     ...

▶ Local vars
D:\Priyanka_Angular1\virtual_env\django-angular\lib\site-packages\rest_framework\generics.py in get

            return self.list(request, *args, **kwargs)

     ...

▶ Local vars
D:\Priyanka_Angular1\virtual_env\django-angular\lib\site-packages\rest_framework\mixins.py in list

            queryset = self.filter_queryset(self.get_queryset())

     ...

▶ Local vars
D:\Priyanka_Angular1\virtual_env\django-angular\lib\site-packages\rest_framework\generics.py in get_queryset

                % self.__class__.__name__

serializer.py

from rest_framework import serializers
from posts.models import Post

class PostSerializer(serializers.HyperlinkedModelSerializer):
    author = serializers.Field(source='author.username')
    api_url = serializers.SerializerMethodField('get_api_url')
 
    class Meta:
        model = Post
        fields = ('id', 'title', 'description', 'created_on', 'author', 'url', 'api_url')
        read_only_fields = ('id', 'created_on')
 
    def get_api_url(self, obj):
         return "#/post/%s" % obj.id

views.py

from django.shortcuts import render
from rest_framework import generics
from posts.models import Post
from posts.serializers import PostSerializer
 
class PostList(generics.ListCreateAPIView):
  """
   List all boards, or create a new board.
  """
  model = Post
  serializer_class = PostSerializer
 
 
class PostDetail(generics.RetrieveUpdateDestroyAPIView):
  """
   Retrieve, update or delete a board instance.
  """
  model = Post
  serializer_class = PostSerializer

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    代替:

    model = 后期使用 queryset=Post.objects.all()

    应该用词完美。

    【讨论】:

      【解决方案2】:

      只需包含在 views.py 中并创建 serializers.py

      views.py 从 autentication.serializers 导入 TestSerializer

      authentication_classes = ()
      permission_classes = ()
      serializer_class = TestSerializer
      

      序列化器.py

      from rest_framework import serializers
      class TestSerializer(serializers.Serializer):
      

      注意:Python 3.8.x 与 djangorestframework 3.11.x

      【讨论】:

        【解决方案3】:

        您需要在您的PostList 视图以及PostDetail 中包含queryset = Post.objects.all()

        每个视图都需要定义一个查询集以了解要查找的对象。您可以使用queryset 属性(正如我建议的那样)或从get_queryset 方法返回有效的查询集来定义视图的查询集。

        顺便说一句,您可以去掉视图中的model 属性,因为它们不被使用。这不是告诉视图要查找哪些对象的正确方法。

        【讨论】:

          猜你喜欢
          • 2015-09-28
          • 2018-12-03
          • 2021-06-24
          • 2017-12-22
          • 2019-10-29
          • 2021-03-24
          • 2021-08-07
          • 2020-05-03
          • 1970-01-01
          相关资源
          最近更新 更多