属性错误“ QueryDict”对象没有属性“ _meta”

时间:2020-03-24 14:08:54

标签: django

我正在尝试将PostMan中的发帖请求发送到我的Django视图中,并且出现此错误。 “ AttributeError:'QueryDict'对象没有属性'_meta'” 根据我的收集,它与traceba中的form.save()有关。 我到处搜索以找到解决方案,甚至更好的方法来实现从外部Web客户端到Django服务器的图像发布。 非常感谢所有帮助。

跟踪

Capture.PNG
form is valid
Internal Server Error: /getimg/
Traceback (most recent call last):
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
    raise exc
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\decorators.py", line 50, in handler
    return func(*args, **kwargs)
  File "C:\Users\Gedit\Desktop\django\indivproj\getimg\api\views.py", line 21, in getimg
    form.save()
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\serializers.py", line 207, in save
    self.instance = self.update(self.instance, validated_data)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\serializers.py", line 979, in update
    info = model_meta.get_field_info(instance)
  File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\utils\model_meta.py", line 35, in get_field_info
    opts = model._meta.concrete_model._meta
AttributeError: 'QueryDict' object has no attribute '_meta'
[24/Mar/2020 13:39:25] "POST /getimg/ HTTP/1.1" 500 20251 

Capture.PNG form is valid Internal Server Error: /getimg/ Traceback (most recent call last): File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view return view_func(*args, **kwargs) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\django\views\generic\base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 505, in dispatch response = self.handle_exception(exc) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 465, in handle_exception self.raise_uncaught_exception(exc) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception raise exc File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\views.py", line 502, in dispatch response = handler(request, *args, **kwargs) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\decorators.py", line 50, in handler return func(*args, **kwargs) File "C:\Users\Gedit\Desktop\django\indivproj\getimg\api\views.py", line 21, in getimg form.save() File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\serializers.py", line 207, in save self.instance = self.update(self.instance, validated_data) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\serializers.py", line 979, in update info = model_meta.get_field_info(instance) File "C:\Users\Gedit\Desktop\django\virtualenv\lib\site-packages\rest_framework\utils\model_meta.py", line 35, in get_field_info opts = model._meta.concrete_model._meta AttributeError: 'QueryDict' object has no attribute '_meta' [24/Mar/2020 13:39:25] "POST /getimg/ HTTP/1.1" 500 20251

Views.py

@api_view(['POST',])
def getimg(request):
    if request.method == 'POST':
        form = ImageSerializer(request.POST, request.FILES)
        logger.warning(request.FILES['img'])
        if form.is_valid():
            #raise_exception=True
            logger.warning('form is valid')
            form.save()
            logger.warning()
            response_dict = {'post': 'success'}
            return HttpResponse(simplejson.dumps(response_dict), content_type='application/javascript')
        else:
            logger.warning(form.errors)
    else:
        form = ImageSerializer()
    return render(request, 'getimg.html', {'form': form})

Serializers.py @api_view(['POST',]) def getimg(request): if request.method == 'POST': form = ImageSerializer(request.POST, request.FILES) logger.warning(request.FILES['img']) if form.is_valid(): #raise_exception=True logger.warning('form is valid') form.save() logger.warning() response_dict = {'post': 'success'} return HttpResponse(simplejson.dumps(response_dict), content_type='application/javascript') else: logger.warning(form.errors) else: form = ImageSerializer() return render(request, 'getimg.html', {'form': form})

Models.py

class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Image
        fields = '__all__'

class ImageSerializer(serializers.ModelSerializer): class Meta: model = Image fields = '__all__'

Urls.py

class Image(models.Model):
   # name = models.CharField(default='name', max_length=30)
    img = models.ImageField(upload_to='images/', max_length=1000)

class Image(models.Model): # name = models.CharField(default='name', max_length=30) img = models.ImageField(upload_to='images/', max_length=1000)

邮递员 The postman post request

1 个答案:

答案 0 :(得分:0)

因此,作为一个聪明的人环顾四周之后,我意识到我还没有定义save()函数是什么...所以现在我做了

已修复错误但仍无法正常工作的代码

    def save(self):
    img = Image(
               img =self.validated_data['img'],
        )