[英]How to serialize models in Django?
我有一个非常简单和明显的问题,我现在想搜索一段时间。
我有一个模型Picture
,它具有诸如created_by
, Province
和City
类的外键。
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.