2014-11-25 52 views
0

我是django-rest-framework的新手,我无法获取图像作为浏览按钮在我的休息框架中,我正在获取文本字段,这里是我的代码如下...........如何使用浏览按钮从django rest框架上传图片?

views.py

from django.shortcuts import render 
from serializers import * 
from rest_framework import viewsets 

class newsViewSet(viewsets.ModelViewSet): 
""" 
API endpoint that allows users to be viewed or edited. 
""" 
queryset = news.objects.all() 
serializer_class = newsSerializer 

class news_categoriesViewSet(viewsets.ModelViewSet): 

queryset = news_categories.objects.all() 
serializer_class = news_categoriesSerializer 

models.py

from django.db import models 
from django.utils.encoding import smart_unicode 

class news_categories(models.Model): 
cat_name = models.CharField(max_length=30, null=True) 
created_at = models.DateTimeField(auto_now_add=True) 
def __unicode__(self): 
    return smart_unicode(self.cat_name) 

def Content_files(instance, filename): 
return '/'.join(['Media','News Image', filename]) 

class news(models.Model): 
name = models.CharField(max_length=30,null=True) 
description = models.TextField() 
cat_id = models.ForeignKey('news_categories') 
image = models.FileField(upload_to=Content_files,null=True) 
date = models.DateField() 
created_at = models.DateTimeField(auto_now_add=True) 
def __unicode__(self): 
    return smart_unicode(self.name) 

serializers.py

from django.forms import widgets 
from rest_framework import serializers 
from models import * 

class newsSerializer(serializers.HyperlinkedModelSerializer): 
class Meta: 
    model = news 
    fields = ('url','id','name','description','cat_id','image','date') 

class news_categoriesSerializer(serializers.HyperlinkedModelSerializer): 
class Meta: 
    model = news_categories 
    fields = ('url','id','cat_name') 

任何一个可以帮助我吗?在此先感谢....

+0

PLZ任何一个能帮助我吗? – 2014-11-26 10:53:31

+0

我知道了django rest框架== 2​​.4.4是准确的rest框架 – 2014-11-27 09:03:14

回答

0

与settings.py和休息框架版本的问题,请使用2.4.4

0

我在同样的问题绊倒,当我更新到3.0版本。该解决方案是使用样式属性来定义你的串行FileField或或ImageField的:

file = serializers.FileField(style = {'input_type': 'file'})