如何从外键 ID 中获取值?

我最近开始学习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”}


如您所见,响应不包括我需要的类别名称。你能帮我解决这个问题吗?谢谢


慕盖茨4494581
浏览 127回答 1
1回答

墨色风雨

您可以更新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(写入)创建产品,同时还想将其作为另一个发送的情况表示。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python