如何将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)
答
就做这样的事情:
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中,最后一个只是您的视图的名称。
是的..这就是我想弄清楚如何做 –
好吧...我只是 –
你可以缩进代码,如你的文件。这可能是你有一个缩进错误 – e4c5