Django Rest框架同时序列化ID和URL

2024-04-20 06:55:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我从DRF开始,我想同时序列化IDHyperlinked URL

让我定义一个简单的示例模型:

class Account(model.Models):
    name = models.CharField(max_length=100)
    active = models.BooleanField()

我知道有一个ModelSerializer表示对象,如下所示:

{
   "id": 1,
   "name": "library",
   "active": true
}

还有一个HyperlinkedModelSerializer表示对象,如下所示:

{
   "url": "http://127.0.0.1:8000/core/accounts/1/",
   "name": "library",
   "active": true
}

本质上,在HyperlinkedModelSerializer中,我们可以检索行的ID,但是我要寻找的是得到如下内容:

{
   "id": 1,
   "url": "http://127.0.0.1:8000/core/accounts/1/",
   "name": "library",
   "active": true
}

Tags: 对象namecoreidtruehttpurl序列化
2条回答

我从here那里得到了答案,它对我很有效

这样做可以避免定义模型的字段,然后使用idurl字段(如['url', 'id', 'name', 'active'])在序列化程序中再次定义它们

在这个例子中,它似乎是虚拟的,但当您处理具有更多字段的模型时,这可以为您节省大量时间

class AccountSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Account
        fields = [field.name for field in model._meta.fields]
        fields.extend(['id', 'url'])

我检查了docs,您可以通过将字段“id”包含在fields中来显式添加它

class AccountSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Account
        fields = ['url', 'id', 'name', 'active']

相关问题 更多 >