同时序列化ID和URL Django Rest Framework

f3temu5u  于 2023-05-30  发布在  Go
关注(0)|答案(3)|浏览(194)

我从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
}
iq0todco

iq0todco1#

我检查了文档,你可以显式地添加字段'id',包括在fields中。

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

dpiehjr42#

我从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'])
agxfikkp

agxfikkp3#

你应该把它添加到Nginx配置文件中:

location /api/ {
        .
        .
        .
        proxy_set_header X-Forwarded-Proto https;
        .
        .
        .
    }

相关问题