繁体   English   中英

AttributeError: 'set' 对象在 django 中没有属性 'items'

[英]AttributeError: 'set' object has no attribute 'items' in django

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

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

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

视图.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'

网址.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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM