[英]Django: return value and not key when serialize a foreign field in DRF
我想問一下如何讓ForeignKey
(或ManyToManyField
)文本值顯示在GET
請求中。
下面將生成一個 JSON,其中的keys
是指choices
或ForeignKey
[
{
"album_name": "Album_1",
"grade": "1",
"artist": 2
}
]
但我希望它顯示
[
{
"album_name": "Album_1",
"grade": "Bad",
"artist": "Artist_name_NN"
}
]
我在 Django Rest Framworks 自己的網站或在 SO 或通過各種博客文章發現的與ForeignKey
相關的那些示例不是很明確,並且往往通過使用間接關系來使解釋/解決方案復雜化。
我正在尋找一個最小可行的解決方案,以便在下面的設置中給出的GET
請求中出現值。
## Models.py
class Artist(models.Model):
artist_name = models.CharField(max_length=100)
comment = models.CharField(max_length=100)
def __str__(self):
return (self.artist_name)
class Album(models.Model):
GRADE = (
("1", "Bad"),
("2", "Average"),
("3", "Good"),
)
album_name = models.CharField(max_length=100)
grade = models.CharField(max_length=100, choices=GRADE)
artist = models.ForeignKey(Artist, blank=True, on_delete=models.CASCADE)
def __str__(self):
return (self.album_name)
## views.py
class AlbumViewSet(viewsets.ModelViewSet):
queryset = Album.objects.all()
serializer_class = AlbumSerializer
## Serializers.py
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
model = Album
fields = ['album_name', 'grade', 'artist']
在 drf文檔的序列化程序關系部分可以找到一個很好的例子。
您可以使用StringRelatedField
實現您想要的。 例如:
class AlbumSerializer(serializers.ModelSerializer):
artist = serializers.StringRelatedField()
class Meta:
model = Album
fields = ['album_name', 'grade', 'artist']
這將使用藝術家的__str__
方法來填充該字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.