如何将Filefield或Imagefield数据序列化为python中的json数据django

问题描述:

我实际上是一个业余python程序员,并且试图为android应用程序后端使用django框架。一切都很好,但我的问题实际上是如何将Filefield中的图像传递给JSON。我已经尝试使用SerializerMethodField,如其余框架文档中所述,但没有奏效。对不起,如果这个问题是错误的,但我真的需要帮助。如何将Filefield或Imagefield数据序列化为python中的json数据django

这是从我的序列化器类

class DealSerializer(serializers.ModelSerializer): 
class Meta: 
    model = Deal 
    image = serializers.SerializerMethodField() 
    fields = [ 
     'title', 
     'description', 
     'image' 
    ] 

    def get_image(obj): 
     return obj.image.url 

,这是我的看法

class DealList(APIView): 

    def get(self, request): 
     deals= Deal.objects.all() 
     serializer = DealSerializer(deals, many=True) 
     return Response(serializer) 
+0

是的..这就是我想弄清楚如何做 –

+0

好吧...我只是 –

+0

你可以缩进代码,如你的文件。这可能是你有一个缩进错误 – e4c5

就做这样的事情:

class PhotoSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Photo 
     read_only_fields = ('created_on', 'updated_on') 

class PhotoViewSet(CreateListModelMixin, viewsets.ModelViewSet): 
    serializer_class = PhotoSerializer 
    queryset = Photo.objects.all() 


def ref_directory_path(instance, filename): 
    # file will be uploaded to MEDIA_ROOT/ref/<id>/ 
    return 'ref/{0}/{1}'.format(instance.ref.id, filename) 

class Photo(models.Model): 

    image = models.ImageField(upload_to=estates_directory_path) 
    caption = models.CharField(max_length=50, blank=True) 
    description = models.TextField(blank=True) 
    ref_model = models.ForeignKey(MyModel, on_delete=models.CASCADE, 
          related_name="pictures") 

    def __str__(self): 
     return self.caption 

而在参考模型串行:

class MyModelSerializer(serializers.HyperlinkedModelSerializer): 

    url_apprise = serializers.HyperlinkedIdentityField(
     view_name='estate-assess') 
    location_info = LocationInfoSerializer(many=True, read_only=True) 
    photos = PhotoSerializer(many=True, read_only=True) 

    class Meta: 
     model = Estate 
     read_only_fields = ('created_on', 'updated_on') 
+0

好吧...非常感谢..但它有点混乱..哪些文件我把“ref_directory_path”函数 –

好的..我已经设法修复它,现在可以将文件字段和所有其他字段序列化为json数据。这是代码。 从我的serializer.py。

class DealSerializer(serializers.ModelSerializer): 
    class Meta: 
    model = Deal 
    fields = ('title', 'description', 'image') 

从我的views.py文件。

class DealViewSet(viewsets.ModelViewSet): 
queryset = Deal.objects.all() 
serializer_class = DealSerializer 

诡计发生在urls.py中。我使用了“路由器”,这是rest_framework附带的一个类。它会在后台为您创建一个自定义视图,并且您所做的只是添加一个导致该视图的网址。所以你做这样的事情

router = routers.DefaultRouter() 
router.register('deals', DealViewSet, 'deals') 

urlpatterns = [ 
    url(r'^api/', include(router.urls)),] 

路由器需要3个参数,第一个是该URL的前缀(所以在我的情况下,“API /交易”),第二一个是模型类的名字在views.py中,最后一个只是您的视图的名称。