Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python django中将Filefield或Imagefield数据序列化为json数据_Python_Json_Django_Django Rest Framework - Fatal编程技术网

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

如何在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

我实际上是一名业余python程序员,正在尝试将django框架用于android应用程序后端。一切正常,但我的问题实际上是如何将文件字段中的图像传递给JSON。我曾尝试使用rest框架文档中描述的SerializerMethodField,但没有成功。很抱歉,如果这个问题偏离了轨道,但我真的需要帮助

这是来自我的序列化程序类

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”函数放在哪个文件中