如何用foreighkey显示name而不是id与django restframework

k4ymrczo  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(80)

Django应用程序和外国的关系。但是API调用显示的是id而不是名字。但我想显示姓名而不是身份证。
这是一个属性:

category = models.ForeignKey(Category, related_name='animals', on_delete=models.CASCADE, verbose_name="test")

字符串
串行器:

class SubAnimalSerializer(serializers.ModelSerializer):
    class Meta:
        model = Animal
        fields = ['id', 'name', 'description',"category","pet_list", 'images' ]
        read_only_fields = ['id']


这是API调用的一部分:

"animals": [
        {
            "id": 3,
            "name": "Vicuña",
            "description": "kjhkkhkhkjhjkhj Hello",
            "category": 6,
            "pet_list": "D",
            "images": "http://192.168.1.135:8000/media/media/photos/animals/mammal.jpg"
        },
        {
            "id": 5,
            "name": "Goudhamster",
            "description": "khkjh",
            "category": 6,
            "pet_list": "C",
            "images": "http://192.168.1.135:8000/media/media/photos/animals/imgbin_dog-grooming-puppy-cat-pet-png_I7rLPen.png"
        }
    ],


当然,我也在谷歌上搜索了一些东西。所以我发现了这个
How to show name instad of id in django ForeignKey?
但它并不完全符合我正在寻找的。
问:如何在API调用中显示name而不是id

9vw9lbht

9vw9lbht1#

可以使用**SlugRelatedField**[drf-doc]:

class SubAnimalSerializer(serializers.ModelSerializer):
    category = serializers.SlugRelatedField(
        slug_field='name', queryset=Category.objects.all()
    )

    class Meta:
        model = Animal
        fields = ['id', 'name', 'description', 'category', 'pet_list', 'images']
        read_only_fields = ['id']

字符串
为了写入,Category中的name字段应该是唯一的,并且优选地具有db_index=True

5lhxktic

5lhxktic2#

在序列化器中定义一个字段,并像这样使用它的source属性:

class SubAnimalSerializer(serializers.ModelSerializer):
    category_name = serializers.CharField(source='category.name', read_only=True) # <==== 

    class Meta:
        model = Animal
        fields = ['id', 'name', 'description',"category_name","pet_list", 'images' ]
        read_only_fields = ['id']

字符串

相关问题