Django rest framework之ModelSerializ
巢狀的序列化關係複雜了,預設的ModelSerializer的 .create() 和 .update() 方法是不支援nested representations的。所以REST framework 3要求你針對nested representations自己寫專門的方法。
一個替代方案是“在模型管理器類中儲存相關例項”。
處理多個物件
- Serializing multiple objects
設定many=true
queryset = Book.objects.all()
serializer = BookSerializer(queryset, many=True)
serializer.data
使用context可以新增其它欄位,.to_representation()方法透過self.context屬性訪問。
serializer = AccountSerializer(account, context={'request': request})
serializer.data
ModelSerializer
快速建立相關模型的serializer 模型
- 自動產生基於模型的fileds
- 自動產生驗證器,比如unique_together驗證器
- 預設包含create和uodate方法
外來鍵被對映為PrimaryKeyRelatedField.
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = ('id', 'account_name', 'users', 'created')
檢查modelserializer
python manage.py shell
>>> from myapp.serializers import AccountSerializer
>>> serializer = AccountSerializer()
>>> print(repr(serializer))
AccountSerializer():
id = IntegerField(label='ID', read_only=True)
name = CharField(allow_blank=True, max_length=100, required=False)
owner = PrimaryKeyRelatedField(queryset=User.objects.all())
顯示哪些欄位
fields = ('id', 'account_name', 'users', 'created')
fields = '__all__'
exclude = ('users',)
Specifying nested serialization ModelSerializer預設使用關聯模型的主要關鍵字,指明depth可以得到更多
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = ('id', 'account_name', 'users', 'created')
depth = 1
自定義欄位 在serilaizer裡面指定對應的函式,source='get_absolute_url',
class AccountSerializer(serializers.ModelSerializer):
url = serializers.CharField(source='get_absolute_url', read_only=True)
groups = serializers.PrimaryKeyRelatedField(many=True)
class Meta:
model = Account
Specifying read only fields 設定了editable=False和AutoField欄位的預設是read-only.
read_only_fields = ('account_name',)
注意:即使read-only物件又unique_together限制,這時Providing both the read_only=True and default=… keyword arguments.
serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
附加關鍵字引數 與read_only_fields一樣,這意味著您不需要在序列器上顯式宣告該欄位。
將欄位名稱對映到關鍵字引數的字典。
extra_kwargs = {'password': {'write_only': True}}
關聯欄位 替代表示:使用超連結進行序列化,序列化完整的巢狀表示,或使用自定義表示序列化。
Customizing field mappings通常,如果一個ModelSerializer沒有生成預設情況下需要的欄位,那麼您應該將它們明確地新增到類中,或者直接使用常規的Serializer類。 但是在某些情況下,您可能需要建立一個新的基類,定義如何為任何給定的模型建立序列化程式欄位。
- .serializer_field_mapping
- .serializer_related_field
- serializer_url_field
- serializer_choice_field
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2370/viewspace-2799487/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Django REST framework 分頁DjangoRESTFramework
- django rest framework serializers小結DjangoRESTFramework
- django rest_framework面經DjangoRESTFramework
- Django REST framework完全入門DjangoRESTFramework
- Django REST Framework Quickstart 專案DjangoRESTFrameworkUI
- Django REST framework API 指南(21):SchemasDjangoRESTFrameworkAPI
- Token認證——Django Rest framework(1)DjangoRESTFramework
- Django REST Framework中的Serializer relationsDjangoRESTFramework
- Django REST framework API 指南(6):路由DjangoRESTFrameworkAPI路由
- Django REST framework API 指南(7):解析DjangoRESTFrameworkAPI
- Django REST framework API 指南(8):渲染DjangoRESTFrameworkAPI
- Django REST framework API 指南(27):SettingsDjangoRESTFrameworkAPI
- Django REST framework API 指南(15):限流DjangoRESTFrameworkAPI
- 深度解析Django REST Framework 批量操作DjangoRESTFramework
- 二、django rest_framework原始碼之認證流程剖析DjangoRESTFramework原始碼
- django rest framework 檢視原始碼解析DjangoRESTFramework原始碼
- Django REST framework API 指南(17):分頁DjangoRESTFrameworkAPI
- Django REST framework API 指南(18):版本控制DjangoRESTFrameworkAPI
- Django REST framework API 指南(13):認證DjangoRESTFrameworkAPI
- 管理平臺模板 Django REST Framework +ElementUIDjangoRESTFrameworkUI
- View + django-rest-framework序列化ViewDjangoRESTFramework
- Django REST framework API 指南(23):返回 URLDjangoRESTFrameworkAPI
- Django REST framework API 指南(24):異常DjangoRESTFrameworkAPI
- Django REST framework API 指南(26):測試DjangoRESTFrameworkAPI
- Django REST framework API 指南(16):過濾DjangoRESTFrameworkAPI
- Django REST framework API 指南(5):檢視集DjangoRESTFrameworkAPI
- Django REST framework API 指南(12):驗證器DjangoRESTFrameworkAPI
- Django REST framework API 指南(14):許可權DjangoRESTFrameworkAPI
- Django REST framework API 指南(9):序列化DjangoRESTFrameworkAPI
- Django REST framework的請求與響應DjangoRESTFramework
- Django-rest-framework 是個什麼鬼?DjangoRESTFramework
- Django REST framework API 指南(4):通用檢視DjangoRESTFrameworkAPI
- Django REST framework API 指南(22):Format 字尾DjangoRESTFrameworkAPIORM
- Django REST framework API 指南(25):狀態碼DjangoRESTFrameworkAPI
- 快用Django REST framework寫寫API吧DjangoRESTFrameworkAPI
- Django REST framework+Vue 打造生鮮超市(十三)DjangoRESTFrameworkVue
- Django REST framework API 指南(19):內容協商DjangoRESTFrameworkAPI
- Django REST framework API 指南(20):後設資料DjangoRESTFrameworkAPI