1

想知道如何在 POST Tracks 的专辑“选项”中显示专辑名称而不是“专辑对象”,请参阅下图。

http://s27.postimg.org/8n2uakd9f/Screen_Shot_2014_12_29_at_6_29_07_PM.png

这是我的模型和序列化器..

模型.py

class Album(models.Model):
    name = models.CharField(max_length=100)
    artist = models.CharField(max_length=100)
    year = models.CharField(max_length=4)
    origin = models.CharField(max_length=50)

class Track(models.Model):
    album = models.ForeignKey(Album, related_name='tracks')
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    duration = models.IntegerField()

    class Meta:
        unique_together = ('album', 'order')
        ordering = ('order',)

    def __unicode__(self):
        return '%d: %s' % (self.order, self.title)

序列化程序.py

class TrackSerializer(serializers.ModelSerializer):

    class Meta:
        model = Track
        fields = ('order', 'title', 'duration','album')

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ('name', 'artist', 'year', 'origin', 'tracks')

专辑数据(示例):

[
    {
        "name": "Album1", 
        "artist": "Artist1", 
        "year": "2012", 
        "origin": "Somewhere", 
        "tracks": []
    }, 
    {
        "name": "Album2", 
        "artist": "Artist2", 
        "year": "2014", 
        "origin": "Somewhere", 
        "tracks": []
    }
]

先感谢您

4

2 回答 2

1

__str__您可以通过在模型中定义方法(或__unicode__在 Python 2 中)来自定义此标签:

class Album(models.Model):
    name = models.CharField(max_length=100)
    artist = models.CharField(max_length=100)
    year = models.CharField(max_length=4)
    origin = models.CharField(max_length=50)


    def __str__(self):
         return "%s (by %s)" % (self.name, self.artist)

每当 Django 必须打印对此对象的引用时(包括在 django-rest-framework 和 Django 管理员中),都会使用此函数

于 2014-12-29T10:49:07.167 回答
0

您可以使用 aCustomRelatedField来控制对象在 Django REST Framework 中的显示方式,而无需更改模型的__str____unicode__方法。

http://www.django-rest-framework.org/api-guide/relations/#custom-relational-fields

于 2014-12-29T10:51:38.993 回答