【问题标题】:How to change what Django model returns as a value?如何更改 Django 模型返回的值?
【发布时间】:2020-12-08 05:50:08
【问题描述】:

我正在尝试将我的Product kind 作为我声明的名称,而不是我得到的数字。让我更清楚: 下面这个是我的Product Kinds

PRODUCT_KINDS = (
    ("1","Electronic"),
    ("2","Furniture"),
    ("3", "Bedroom"),
    ("4","Dining")

)

下面这张图片是我的 django-admin 面板,一切看起来都很完美,因为我可以得到我的每一种。

但是,当我尝试从 api/products url 获取这些数据时,我得到了这些数据

[
    {
        "image": null,
        "name": "Headphones",
        "kind": "1",
        "price": 250.99,
        "description": "No description for this item.",
        "is_featured": true
    },
    {
        "image": null,
        "name": "Watch",
        "kind": "3",
        "price": 12.5,
        "description": "No description for this item.",
        "is_featured": true
    },
    {
        "image": null,
        "name": "T-shirt",
        "kind": "2",
        "price": 12.99,
        "description": "No description for this item.",
        "is_featured": true
    },
    {
        "image": null,
        "name": "Ali Ziya ÇEVİK",
        "kind": "1",
        "price": 1212.0,
        "description": "No description for this item.",
        "is_featured": false
    }
]

如您所见,在我的 django-admin 面板中,我得到了 kind 的名称,但在 API 中,我得到了它的索引。

以下是我的serializer

from rest_framework import serializers
from .models import Product


class ProductSerializer(serializers.ModelSerializer):
    #kind = serializers.CharField(source = 'kind')
    #print(kind)
    class Meta:

        model = Product
        fields = ['image', 'name', 'kind',
                  'price', 'description', 'is_featured']


【问题讨论】:

    标签: python django serialization django-rest-framework django-serializer


    【解决方案1】:

    您可以通过Model.get_FOO_display() 方法设置源值

    kind = serializers.CharField(source = 'get_kind_display')
    

    【讨论】:

    • 谢谢这个解决方案比我的好。
    【解决方案2】:

    您可以尝试使用 get_FOO_display 使用字段源: https://docs.djangoproject.com/en/1.8/ref/models/instances/#django.db.models.Model.get_FOO_display

    from rest_framework import serializers
    from .models import Product
    
    
    class ProductSerializer(serializers.ModelSerializer):
    
        kind = serializers.CharField(source='get_kind_display')
        class Meta(object):
            model = Product
            fields = ('image', 'name', 'kind','price', 'description', 'is_featured')
    

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2020-01-14
      • 2022-11-28
      • 2021-09-11
      • 2012-05-10
      相关资源
      最近更新 更多