Python 如何在Django Rest框架中显示字段值而不是外键的id,以确保所有字段都像以前一样显示在DRF HTML表单上

Python 如何在Django Rest框架中显示字段值而不是外键的id,以确保所有字段都像以前一样显示在DRF HTML表单上,python,django-rest-framework,Python,Django Rest Framework,型号: 序列化程序: 目前,我得到的输出低于上述输出: [ { "name": 1, "dob": "1990-05-19", "gender": 1 } ] 其中,个人id 1=约翰·史密斯,性别id 1为男性。我有几种关于stackoverflow的解决方案,例如: 所有这些方法都可以工作,但是Django Rest框架将外键设置为只读,并且这些字

型号:

序列化程序:

目前,我得到的输出低于上述输出:

[
    {
        "name": 1,
        "dob": "1990-05-19",
        "gender": 1
    }
]
其中,个人id 1=约翰·史密斯,性别id 1为男性。我有几种关于stackoverflow的解决方案,例如:

所有这些方法都可以工作,但是Django Rest框架将外键设置为只读,并且这些字段不再显示在DRF HTML表单中。我这里的问题是如何显示外键字段值而不是id,以确保DRF HTML表单仍然显示这些字段,因为前面的方法覆盖了ProfileSerializer类的to_表示方法

重写ProfileSerializer类的to_表示方法


如果不想替代到_表示,可以创建SerializerMethodField:

类ProfileSerializerserializers.ModelSerializer: 名称=serializers.SerializerMethodField 类元: 模型=外形 字段=['name','dob','gender'] 调用此方法以获取字段`name'的值` def get_名称自身,配置文件: 返回profile.name.name
如果不想替代到_表示,可以创建SerializerMethodField:

类ProfileSerializerserializers.ModelSerializer: 名称=serializers.SerializerMethodField 类元: 模型=外形 字段=['name','dob','gender'] 调用此方法以获取字段`name'的值` def get_名称自身,配置文件: 返回profile.name.name
用户:12578202感谢以上内容。我如何使用类似的方法将多个域ID转换为其在to_表示中的值。请确实提出一个新问题。它非常有效谢谢用户:12578202谢谢上述内容。我如何使用类似的方法将多个域ID转换为其在to_表示中的值。请确实询问一个新问题。该方法非常有效,谢谢
class PersonSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        fields = '__all__'


class GenderSerializer(serializers.ModelSerializer):

    class Meta:
        model = Gender
        fields = '__all__'


class ProfileSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = Profile
        fields = ['name', 'dob', 'gender']
[
    {
        "name": 1,
        "dob": "1990-05-19",
        "gender": 1
    }
]
class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ['name', 'dob', 'gender']

    def to_representation(self, instance):
        rep = super().to_representation(instance)
        rep['gender'] = GenderSerializer(instance.gender).data
        return rep