如何在python django中将Filefield或Imagefield数据序列化为json数据
我实际上是一名业余python程序员,正在尝试将django框架用于android应用程序后端。一切正常,但我的问题实际上是如何将文件字段中的图像传递给JSON。我曾尝试使用rest框架文档中描述的SerializerMethodField,但没有成功。很抱歉,如果这个问题偏离了轨道,但我真的需要帮助 这是来自我的序列化程序类如何在python django中将Filefield或Imagefield数据序列化为json数据,python,json,django,django-rest-framework,Python,Json,Django,Django Rest Framework,我实际上是一名业余python程序员,正在尝试将django框架用于android应用程序后端。一切正常,但我的问题实际上是如何将文件字段中的图像传递给JSON。我曾尝试使用rest框架文档中描述的SerializerMethodField,但没有成功。很抱歉,如果这个问题偏离了轨道,但我真的需要帮助 这是来自我的序列化程序类 class DealSerializer(serializers.ModelSerializer): class Meta: model = Deal i
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 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
好的。。我已经设法修复了它,现在可以将文件字段和所有其他字段序列化为json数据。这是代码。 从我的serializer.py
class DealSerializer(serializers.ModelSerializer):
class Meta:
model = Deal
fields = ('title', 'description', 'image')
从my views.py文件
class DealViewSet(viewsets.ModelViewSet):
queryset = Deal.objects.all()
serializer_class = DealSerializer
技巧发生在url.py中。我使用了“路由器”,它是rest_框架附带的一个类。它在后台为您创建一个自定义视图,您所做的只是添加一个指向该视图的url。所以你做了这样的事
router = routers.DefaultRouter()
router.register('deals', DealViewSet, 'deals')
urlpatterns = [
url(r'^api/', include(router.urls)),]
路由器有3个参数,第一个是url的前缀(在我的例子中是“api/deals”),第二个是views.py中模型类的名称,最后一个只是视图的名称。好的。。我已经设法修复了它,现在可以将文件字段和所有其他字段序列化为json数据。这是代码。 从我的serializer.py
class DealSerializer(serializers.ModelSerializer):
class Meta:
model = Deal
fields = ('title', 'description', 'image')
从my views.py文件
class DealViewSet(viewsets.ModelViewSet):
queryset = Deal.objects.all()
serializer_class = DealSerializer
技巧发生在url.py中。我使用了“路由器”,它是rest_框架附带的一个类。它在后台为您创建一个自定义视图,您所做的只是添加一个指向该视图的url。所以你做了这样的事
router = routers.DefaultRouter()
router.register('deals', DealViewSet, 'deals')
urlpatterns = [
url(r'^api/', include(router.urls)),]
路由器有3个参数,第一个是url的前缀(在我的例子中是“api/deals”),第二个是views.py中模型类的名称,最后一个只是视图的名称。yes。。这就是我想弄明白的,如何去杜凯。。。我刚才问你,你能把代码缩进你的文件吗。也许你有一个缩进错误是的。。这就是我想弄明白的,如何去杜凯。。。我刚才问你,你能把代码缩进你的文件吗。也许你有一个错误好吧。。。非常感谢。。但这有点让人困惑..我应该把“ref\u directory\u path”函数放在哪个文件上好的。。。非常感谢。。但是有点让人困惑..我应该把“ref\u directory\u path”函数放在哪个文件中