【问题标题】:AttributeError: 'set' object has no attribute 'items' in djangoAttributeError:'set'对象在django中没有属性'items'
【发布时间】:2020-09-24 10:29:31
【问题描述】:

如果在正文或标题中输入空值,我正在 DRF 中进行自定义以提供错误响应值。但是压码后,测试出现如下错误。

AttributeError: 'set' 对象没有属性 'items'

我不知道这个错误是什么意思,也不知道为什么会发生。你能告诉我我的代码有什么问题吗?这是我的代码。

views.py

class CreatePostView (ModelViewSet) :
    serializer_class = PostSerializer
    permission_classes = [IsAuthenticated]
    queryset = Post.objects.all()

序列化器.py

class PostSerializer (serializers.ModelSerializer) :
    author = serializers.CharField(source='author.username', read_only=True)
    title = serializers.CharField(allow_null=True)
    text = serializers.CharField(allow_null=True)
    image = ImageSerializer(many=True)

    class Meta:
        model = Post
        fields = ['pk', 'author', 'title', 'text', 'like', 'liker', 'image', 'view']

    def validate (self, attrs) :
        title = attrs.get('title', '')
        text = attrs.get('text', '')

        error = {}

        if title is None and text is None :
            error['message'] = '제목과 본문을 넣어주세요.'
            raise serializers.ValidationError(error)

        if title is None  :
            error['message'] = '제목을 넣어주세요.'
            raise serializers.ValidationError(error)

        if text is None :
            error['message'] = '본문을 넣어주세요.'
            raise serializers.ValidationError(error)

        return attrs

    def create (self, validated_data) :
        return Post.objects.create(**validated_data)

追溯

Traceback (most recent call last):
  File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\kurak\AppData\Local\Programs\Python\Python38-32\lib\site-packages\rest_framework\viewsets.py", line 102, in view
    for method, action in actions.items():
AttributeError: 'set' object has no attribute 'items'

urls.py

from django.urls import path, include
from .views import CreatePostView
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('post', CreatePostView.as_view({'post', 'create'})),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【问题讨论】:

  • 添加完整的错误回溯
  • @ArakkalAbu 我添加它
  • 添加你的 urls.py
  • @ArakkalAbu 我也加了

标签: python django django-rest-framework


【解决方案1】:

应该是 {'post':'create'} 而不是 {'post', 'create'}

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2013-09-22
    • 2015-09-30
    • 2020-09-22
    • 2021-11-02
    相关资源
    最近更新 更多