0

我的ImageField模型中有一个带有默认图像的选项。我正在为模型 api 使用 Django Rest Framework。但是,当我尝试在没有图像的情况下发布(在浏览器外发布请求)时,我继续收到错误消息:No file was submitted. Check the encoding type on the form.

models.py

class Detector(models.Model):
    average_image = models.ImageField(upload_to='average_image/',
                                      default='average_image/default.png',
                                      null=True, blank=True)

serializer.py

class DetectorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Detector
        fields = ('average_image')

views.py

class DetectorAPIList(generics.ListCreateAPIView):
    serializer_class = DetectorSerializer

我错过了什么?

谢谢你的时间!

4

1 回答 1

1

我遇到了同样的问题,我必须将序列化程序中的图像字段显式标记为空白:

class DetectorSerializer(serializers.ModelSerializer):
    average_image = serializers.ImageField(source='average_image', blank=True)

    class Meta:
        model = Detector
        fields = ('average_image',)

似乎休息框架无法从模型或其他东西中获取它。在此之后,我可以使用如下请求将数据发布到 API:

import requests
from requests.auth import HTTPBasicAuth

r = requests.post(
    'http://localhost:8000/detectors/',
    data={'some': 'data'},
    auth=HTTPBasicAuth('user', 'password')
)
print r.text

这是响应,您可以看到它使用了模型字段定义中的默认值:

{"average_image": "average_image/default.png"}

您也可以尝试使用指定的文件进行 POST:

r = requests.post(
    'http://localhost:8000/detectors/',
    files={'average_image': open('/path/to/image.jpg')},
    data={'some': 'data'},
    auth=HTTPBasicAuth('user', 'password')
)
print r.text

希望这可以帮助。

于 2013-11-06T22:02:41.770 回答