Skip to main content
 首页 » 编程设计

python之如何在 django rest 框架中获取外键字段名称而不是 id

2025年05月04日32小虾米

这是我的模型.py

from __future__ import unicode_literals 
from django.db import models 
 
class User(models.Model): 
    name = models.CharField(max_length=200) 
    company_name = models.ForeignKey('Company',on_delete=models.CASCADE,related_name='user') 
 
    def __str__(self): 
        return self.name 
 
class Company(models.Model): 
    name = models.CharField(max_length=200) 
    phone_number = models.IntegerField(null=True,blank=True) 
 
    def __str__(self): 
        return self.name 
 
class Catalog(models.Model): 
    name = models.CharField(max_length=200) 
    no_of_pcs = models.IntegerField(null=True,blank=True) 
    per_piece_price = models.DecimalField(null=True,blank=True,max_digits=10,decimal_places=2) 
    company_name = models.ForeignKey(Company,on_delete=models.CASCADE,related_name='catalog') 
 
    def __str__(self): 
        return self.name 

这是我的serializers.py

from rest_framework import serializers 
from .models import * 
from django.db.models import Sum,Count 
 
class UserSerializer(serializers.ModelSerializer): 
    # name = serializers.StringRelatedField() 
    # company_name = serializers.CharField() 
    class Meta: 
        model = User 
        fields = '__all__' 

这是我的views.py

from __future__ import unicode_literals 
from django.http import HttpResponse 
from .models import * 
import json 
from django.http import JsonResponse, HttpResponse 
from .serializers import * 
from rest_framework.views import APIView 
from rest_framework.response import Response 
from rest_framework import status 
from rest_framework import viewsets 
 
class UserView(viewsets.ModelViewSet): 
    queryset =  User.objects.all() 
    serializer_class = UserSerializer 

我正在获取这样的 api.. 在这里我得到的是 id 而不是 company_name。

[ 
    { 
        "id": 1, 
        "name": "soubhagya", 
        "company_name": 1 
    }, 
    { 
        "id": 2, 
        "name": "nihar", 
        "company_name": 2 
    } 
] 

但我期待输出--

像这样:

[ 
    { 
        "id": 1, 
        "name": "soubhagya", 
        "company_name": "google" 
    }, 
    { 
        "id": 2, 
        "name": "nihar", 
        "company_name": "facebook" 
    } 
] 

我期待这样的 api。与公司名称。 我想在 rest 框架中发布来自相同 api 的数据 谢谢,,

请您参考如下方法:

由于您在 Company 模型中定义了 __str__() 方法,您可以使用StringRelatedField()作为

class UserSerializer(serializers.ModelSerializer): 
    <b>company_name = serializers.StringRelatedField()</b> 
    class Meta: 
        model = User 
        fields = '__all__'


更新
覆盖 to_representation 方法

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
        model = User 
        fields = '__all__' 
 
    <b>def to_representation(self, instance): 
        rep = super(UserSerializer, self).to_representation(instance) 
        rep['company_name'] = instance.company_name.name 
        return rep</b>