2016-11-07 3 views
0

私は実際にはアマチュアのpythonプログラマーで、アンドロイドアプリのバックエンドにdjangoフレームワークを使用しようとしています。すべて問題はありませんが、私の問題は実際にFilefieldのイメージをJSONに渡す方法です。私は、残りのフレームワークのドキュメントで説明されているようにSerializerMethodFieldを使ってみましたが、うまくいきませんでした。申し訳ありませんが、この質問はトラックのオフですが、真剣に助けが必要です。FileTypeまたはImagefieldデータをPython djangoのjsonデータにシリアライズする方法

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 DealSerializer(serializers.ModelSerializer): 
class Meta: 
    model = Deal 
    image = serializers.SerializerMethodField() 
    fields = [ 
     'title', 
     'description', 
     'image' 
    ] 

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

からのものであり、これが私の見解です:

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に付属するクラスである "ルータ"を使用しました。それはあなたのためのカスタムビューをバックグラウンドで作成し、そのビューにつながるURLを追加するだけです。ルータは3つのパラメータを取りますので、あなたは、第一1は、第二1は、モデルクラスの名前、URLの接頭辞(ので、私の場合は「API /取引」)この

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

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

のようなものですかviews.pyと最後のビューはあなたのビューの名前です。

関連する問題