繁体   English   中英

如何在Django中序列化模型?

[英]How to serialize models in Django?

我有一个非常简单和明显的问题,我现在想搜索一段时间。

我有一个模型Picture ,它具有诸如created_byProvinceCity类的外键。

我想要的是将所有模型字段序列化为json

Models.py:

class Picture(models.Model):
    name = models.TextField("Title", max_length=10000, null=True, blank=True)
    meta_data = models.TextField("meta_data", null=True, blank=True)
    created_by = models.ForeignKey(User, related_name="created_by")
    city = models.ForeignKey(City, null=True, blank=True)
    pro = models.ForeignKey(Province, verbose_name="Province")


class Province(models.Model):
    name = models.CharField(max_length=50)
    pi_meta_data = models.TextField(null=True, blank=True)
    intro = models.CharField(max_length=1000, null=True, blank=True)
    description = models.TextField(max_length=10000, null=True, blank=True)


class City(models.Model):
    name = models.CharField(max_length=50)
    pi_meta_data = models.TextField(null=True, blank=True)
    intro = models.CharField(max_length=1000, null=True, blank=True)
    description = models.TextField(max_length=10000, null=True, blank=True)

您可以使用Django Rest Framework ,并轻松地序列化模型。

您的模型序列化器将是:

class PicturesSerializer(serializers.ModelSerializer):

    class Meta:
        model = Picture
        # Only including fields in this case to explicitly show that 
        # every field in the Pictures model is serialized. In the rest of 
        # the Serializes fields will be left out for brevity.
        fields = ("name", "meta_data", "created_by", "city", "pro")

class ProvinceSerializer(serializers.ModelSerializer):

    class Meta:
        model = Province


class CitySerializer(serializers.ModelSerializer):

    class Meta:
        model = City

而已。 认真。

即使您直接更改模型,也可以将所有内容很好地打包到json中。

但是使用序列化数据有多容易? 使用这些序列化模型的简单视图将是:

class PicturesList(APIView):
    """
    List all Pictures, or create a new Picture.
    """
    def get(self, request, format=None):
        pictures = Pictures.objects.all()
        serializer = PicturesSerializer(pictures, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = PicturesSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

该文档确实很棒。 他们有一个不错的教程 ,可以帮助您入门。 他们甚至有一个不错的浏览的api ,使您可以直观地浏览api。

wadofstuff中有一个“ Django完全序列化”模块,可以对相关对象进行序列化。 这个答案https://stackoverflow.com/a/3753769/187729有更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM