基本介绍

假设我们有一个名为 product 的模型。

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.IntegerField()

现在我们要为这个模型声明一个模型序列化器。

from rest_framework.serializers import ModelSerializer

class ProductSerializers(ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'
        read_only_fields = ('id',)

通过这个 ProductSerializers 类,我们声明了一个模型序列化器。在 Meta 类中,通过模型变量,我们告诉 ModelSerializer 我们的模型将是 Product 模型。通过字段变量,我们告诉该序列化器应该包括模型的所有字段。最后,通过 read_only_fields 变量,我们告诉 id 将是一个只读字段,它无法编辑。

让我们看看我们的序列化器中有什么。首先,在命令行中导入序列化程序并创建一个实例,然后将其打印出来。

>>> serializer = ProductSerializers()
>>> print(serializer)
ProductSerializers():
        id = IntegerField(label='ID', read_only=True)
        name = CharField(max_length=100)
        price = IntegerField(max_value=2147483647, min_value=-2147483648)

因此,我们的序列化器从我们的模型中获取所有字段并以自己的方式创建所有字段。

我们可以使用 ProductSerializers 来序列化产品或产品列表。

>>> p1 = Product.objects.create(name='alu', price=10)
>>> p2 = Product.objects.create(name='mula', price=5)
>>> serializer = ProductSerializers(p1)
>>> print(serializer.data)
{'id': 1,'name': 'alu', 'price': 10}

此时我们已将模型实例转换为 Python 本机数据类型。为了完成序列化过程,我们将数据呈现为 json。

>>> from rest_framework.renderers import JSONRenderer
>>> serializer = ProductSerializers(p1)
>>> json = JSONRenderer().render(serializer.data)
>>> print(json)
'{"id": 1,"name": "alu", "price": 10}'