基本介紹

假設我們有一個名為 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}'