簡體   English   中英

Django:在 DRF 中序列化外部字段時返回值而不是鍵

[英]Django: return value and not key when serialize a foreign field in DRF

我想問一下如何讓ForeignKey (或ManyToManyField )文本值顯示在GET請求中。

下面將生成一個 JSON,其中的keys是指choicesForeignKey

[
    {
        "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.

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