2016-11-07 111 views
0

我實際上是一個業餘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

回答

0

就做這樣的事情:

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」函數 –

0

好的..我已經設法修復它,現在可以將文件字段和所有其他字段序列化爲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中,最後一個只是您的視圖的名稱。

相關問題