How to get foreignkey field name instead of id in django rest framework(如何在Django睡觉框架中获取外键字段名而不是id)
                            本文介绍了如何在Django睡觉框架中获取外键字段名而不是id的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
这是我的模型。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
这是我的序列化程序.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是这样的。使用COMPANY_NAME。 我想把同一个接口的数据发布到睡觉框架 谢谢,
推荐答案
由于您已在Company模型中定义了__str__()方法,因此可以将StringRelatedField()用作
class UserSerializer(serializers.ModelSerializer):
    company_name = serializers.StringRelatedField()
    class Meta:
        model = User
        fields = '__all__'
更新
重写to_representation方法
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
    def to_representation(self, instance):
        rep = super(UserSerializer, self).to_representation(instance)
        rep['company_name'] = instance.company_name.name
        return rep
                        这篇关于如何在Django睡觉框架中获取外键字段名而不是id的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:如何在Django睡觉框架中获取外键字段名而不是id
				
        
 
            
        
             猜你喜欢
        
	     - 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
 - pytorch 中的自适应池是如何工作的? 2022-07-12
 - 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
 - python-m http.server 443--使用SSL? 2022-01-01
 - 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
 - padding='same' 转换为 PyTorch padding=# 2022-01-01
 - python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
 - 沿轴计算直方图 2022-01-01
 - 如何将一个类的函数分成多个文件? 2022-01-01
 - 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
 
				
				
				
				