【问题标题】:Default Image in Django Rest FrameworkDjango Rest 框架中的默认图像
【发布时间】:2013-11-16 22:06:39
【问题描述】:

我的模型中有一个可选的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

我错过了什么?

感谢您的宝贵时间!

【问题讨论】:

  • 我也有同样的问题。你解决了这个问题吗?

标签: django django-models django-forms django-rest-framework


【解决方案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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多