簡體   English   中英

如何從外鍵 id 中獲取值?

[英]How to get a value from the foreign key 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”}

如您所見,響應不包括我需要的類別名稱。 你能幫我解決這個問題嗎? 謝謝

您可以更新序列化程序的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(寫入)來創建產品,同時還希望將其作為另一個發送的情況表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM