国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Django Rest Framework 序列化關系模型

nihao / 2810人閱讀

摘要:結合官方分享一下框架中關于序列化關系模型的理解。而序列化關系模型則是對里數據模型中帶有關系的如和字段作序列化。提供了靈活的序列化關系模型,讓開發者可以自由定制序列化數據模型。例如,將主鍵序列化為緊湊的十六進制表示。

這兩天一直在學習 Django Rest Framework 這個框架,這是一個非常流行的 REST API 框架,深度整合 Django。但與傳統 MVC 模式的不同, Django REST Framework 在使用過程中,需要理解一些新的東西。結合官方 API 分享一下框架中關于序列化關系模型的理解。

序列化模型與序列化關系模型

序列化模型,顧名思義,即對 models 里的數據模型作序列化。而序列化關系模型則是對 models 里數據模型中帶有關系的如 ForeignKey, ManyToManyFieldOneToOneField 字段作序列化。Django Rest Framework 提供了靈活的序列化關系模型,讓開發者可以自由定制序列化數據模型。

序列化關系模型

根據官方的例子來看一下每一個關系模型的介紹。

數據模型如下:

class Album(models.Model):
    album_name = models.CharField(max_length=100)
    artist = models.CharField(max_length=100)

class Track(models.Model):
    album = models.ForeignKey(Album, related_name="tracks", on_delete=models.CASCADE)
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    duration = models.IntegerField()

    class Meta:
        unique_together = ("album", "order")
        ordering = ["order"]

    def __unicode__(self):
        return "%d: %s" % (self.order, self.title)
StringRelatedField

使用 StringRelatedField 將返回一個對應關系 model 的 __unicode__() 方法的字符串。

這個字段是只讀的。

參數:

many 如果應用于多對多關系,則應將此參數設置為 True

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.StringRelatedField(many=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結果如下:

{
    "album_name": "Things We Lost In The Fire",
    "artist": "Low",
    "tracks": [
        "1: Sunflower",
        "2: Whitetail",
        "3: Dinosaur Act",
        ...
    ]
}
PrimaryKeyRelatedField

使用 PrimaryKeyRelatedField 將返回一個對應關系 model 的主鍵。

參數:

queryset 用于在驗證字段輸入時模型實例查找。 關系必須明確設置 queryset,或設置 read_only = True

many 如果是對應多個的關系,就設置為 True

allow_null 如果設置為 True,則該字段將接受 None 的值或為空的關系的空字符串。默認為 False

pk_field 設置為一個字段以控制主鍵值的序列化/反序列化。例如,pk_field = UUIDField(format ="hex") 將UUID主鍵序列化為緊湊的十六進制表示。

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結果如下:

{
    "album_name": "Undun",
    "artist": "The Roots",
    "tracks": [
        89,
        90,
        91,
        ...
    ]
}
HyperlinkedRelatedField

使用 HyperlinkedRelatedField 將返回一個超鏈接,該鏈接指向對應關系 model 的詳細數據,view-name 是必選參數,為對應的視圖生成超鏈接。

參數:

view_name 用作關系目標的視圖名稱。如果使用的是標準路由器類,那么它的格式為 -detail 的字符串

queryset 驗證字段輸入時用于模型實例查詢的查詢器。關系必須明確設置 queryset,或設置 read_only = True

many 如果應用于多對多關系,則應將此參數設置為 True

allow_null 如果設置為 True,則該字段將接受 None 的值或為空的關系的空字符串。默認為 False

lookup_field 應該用于查找的目標上的字段。應該對應于引用視圖上的 URL 關鍵字參數。默認值為 pk

lookup_url_kwarg 與查找字段對應的 URL conf 中定義的關鍵字參數的名稱。默認使用與 lookup_field 相同的值

format 如果使用 format 后綴,超鏈接字段將對目標使用相同的 format 后綴,除非使用 format 參數進行覆蓋。

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.HyperlinkedRelatedField(
        many=True,
        read_only=True,
        view_name="track-detail"
    )

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結果如下:

{
    "album_name": "Graceland",
    "artist": "Paul Simon",
    "tracks": [
        "http://www.example.com/api/tracks/45/",
        "http://www.example.com/api/tracks/46/",
        "http://www.example.com/api/tracks/47/",
        ...
    ]
}
SlugRelatedField

使用 SlugRelatedField 將返回一個指定對應關系 model 中的字段,需要擦參數 slug_field 中指定字段名稱。

參數:

slug_field 應該用于表示目標的字段。這應該是唯一標識任何給定實例的字段。例如 username 。這是必選參數

queryset 驗證字段輸入時用于模型實例查詢的查詢器。 關系必須明確設置 queryset,或設置 read_only = True

many 如果應用于多對多關系,則應將此參數設置為 True

allow_null 如果設置為 True,則該字段將接受 None 的值或為空的關系的空字符串。默認為 False

序列化模型如下

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field="title"
     )

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結果如下:

{
    "album_name": "Dear John",
    "artist": "Loney Dear",
    "tracks": [
        "Airport Surroundings",
        "Everything Turns to You",
        "I Was Only Going Out",
        ...
    ]
}
HyperlinkedIdentityField

使用 HyperlinkedIdentityField 將返回指定 view-name 的超鏈接的字段。

參數:

view_name 應該用作關系目標的視圖名稱。如果您使用的是標準路由器類,則它將是格式為 -detail 的字符串。必選參數

lookup_field 應該用于查找的目標上的字段。應該對應于引用視圖上的 URL 關鍵字參數。默認值為 pk

lookup_url_kwarg 與查找字段對應的 URL conf 中定義的關鍵字參數的名稱。默認使用與 lookup_field 相同的值

format 如果使用 format 后綴,超鏈接字段將對目標使用相同的 format 后綴,除非使用 format 參數進行覆蓋

序列化模型如下

class AlbumSerializer(serializers.HyperlinkedModelSerializer):
    track_listing = serializers.HyperlinkedIdentityField(view_name="track-list")

    class Meta:
        model = Album
        fields = ("album_name", "artist", "track_listing")

序列化結果如下:

{
    "album_name": "The Eraser",
    "artist": "Thom Yorke",
    "track_listing": "http://www.example.com/api/track_list/12/",
}
嵌套序列化關系模型

在序列化模型中指定嵌套序列化關系模型將返回一個該嵌套序列化關系模型對應的數據模型中序列化的數據。
讀起來有些拗口,看例子吧。

參數:

many 如果應用于多對多關系,則應將此參數設置為 True

序列化模型如下

class TrackSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ("order", "title", "duration")

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ("album_name", "artist", "tracks")

序列化結果如下:

 {
    "album_name": "The Grey Album",
    "artist": "Danger Mouse",
    "tracks": [
        {"order": 1, "title": "Public Service Announcement", "duration": 245},
        {"order": 2, "title": "What More Can I Say", "duration": 264},
        {"order": 3, "title": "Encore", "duration": 159},
    ],
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44450.html

相關文章

  • Django Rest Framework 列化關系模型

    摘要:結合官方分享一下框架中關于序列化關系模型的理解。而序列化關系模型則是對里數據模型中帶有關系的如和字段作序列化。提供了靈活的序列化關系模型,讓開發者可以自由定制序列化數據模型。例如,將主鍵序列化為緊湊的十六進制表示。 這兩天一直在學習 Django Rest Framework 這個框架,這是一個非常流行的 REST API 框架,深度整合 Django。但與傳統 MVC 模式的不同, ...

    BlackHole1 評論0 收藏0
  • Django Rest Framework 列化關系模型

    摘要:結合官方分享一下框架中關于序列化關系模型的理解。而序列化關系模型則是對里數據模型中帶有關系的如和字段作序列化。提供了靈活的序列化關系模型,讓開發者可以自由定制序列化數據模型。例如,將主鍵序列化為緊湊的十六進制表示。 這兩天一直在學習 Django Rest Framework 這個框架,這是一個非常流行的 REST API 框架,深度整合 Django。但與傳統 MVC 模式的不同, ...

    1fe1se 評論0 收藏0
  • Django REST FrameWork中文教程4:驗證和權限

    摘要:未經身份驗證的請求應具有完全只讀訪問權限。其中一個字段將用于表示創建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應中文教程基于類的視圖中文教程驗證和權限中文教程關系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級的行為,以確保: 代碼段始終與創建者相關聯。 只有身份驗證的用戶可以創建...

    luodongseu 評論0 收藏0
  • Django REST FrameWork中文教程4:驗證和權限

    摘要:未經身份驗證的請求應具有完全只讀訪問權限。其中一個字段將用于表示創建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應中文教程基于類的視圖中文教程驗證和權限中文教程關系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級的行為,以確保: 代碼段始終與創建者相關聯。 只有身份驗證的用戶可以創建...

    _ang 評論0 收藏0
  • Django REST FrameWork中文教程4:驗證和權限

    摘要:未經身份驗證的請求應具有完全只讀訪問權限。其中一個字段將用于表示創建代碼段的用戶。唯一的限制是所包含的必須使用命名空間。中文教程序列化中文教程請求和響應中文教程基于類的視圖中文教程驗證和權限中文教程關系和超鏈接中文教程中文教程模式和客戶端庫 目前,我們的API對誰可以編輯或刪除代碼段沒有任何限制。我們想要一些更高級的行為,以確保: 代碼段始終與創建者相關聯。 只有身份驗證的用戶可以創建...

    Hydrogen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<