[英]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.