为了账号安全,请及时绑定邮箱和手机立即绑定

如何从外键 ID 中获取值?

如何从外键 ID 中获取值?

慕盖茨4494581 2023-02-22 16:41:34
我最近开始学习django,所以我什至不知道怎么问这个问题。我想构建一个 api,我正在使用 django rest 框架。现在我有两个主要模型产品和类别。class Category(models.Model):    id = models.CharField(max_length=100, primary_key=True)    name = models.CharField(max_length=100)class Product(models.Model):    id = models.CharField(max_length=100, primary_key=True)    title = models.CharField(max_length=100)    category = models.ForeignKey(Category, on_delete=models.CASCADE)    price = models.FloatField(default=0.0)我有一些功能@api_view(['GET'])def productList(request):    products = Product.objects.all()    serializer = ProductSerializer(products, many=True)    return Response(serializer.data)@api_view(['POST'])def addProduct(request):    serializer = ProductSerializer(data=request.data)    if serializer.is_valid():        serializer.save()    return Response(serializer.data)所有这些似乎都工作正常,我从一个看起来像这样的 api 得到响应:{id:“1”,标题:“香蕉”,价格:3,类别:“1”}如您所见,响应不包括我需要的类别名称。你能帮我解决这个问题吗?谢谢
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以更新to_representation序列化程序的方法,以包含类别名称或使用嵌套表示。如果您想返回类别的名称:


class ProductSerializer(serializers.ModelSerializer):


    def to_representation(self, instance):

        data = super().to_representation(instance)

        data['category'] = instance.category.name

        return data

如果你想返回类别的嵌套表示,你可以这样做:


class CategorySerializer(serializers.ModelSerializer):

    

    class Meta:

        model = Category

        fields = ('id', 'name',)



class ProductSerializer(serializers.ModelSerializer):


    def to_representation(self, instance):

        data = super().to_representation(instance)

        data['category'] = CategorySerializer(instance.category).data

        return data

请记住,这是针对您使用相同的序列化程序来创建和列出产品的情况,以及您通过接收类别的 ID(写入)创建产品,同时还想将其作为另一个发送的情况表示。


查看完整回答
反对 回复 2023-02-22
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号