在Django官方网站的Serializer关系部分,它提供了一个音乐专辑示例来表示和解释一些关系。
class Album(models.Model):
album_name = models.CharField(max_length=100)
artist = models.CharField(max_length=100)
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)
稍后,它会将模型与Serializer进行交互。
class AlbumSerializer(serializers.ModelSerializer):
tracks = serializers.StringRelatedField(many=True)
class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
结果是:
{
'album_name': 'Things We Lost In The Fire',
'artist': 'Low',
'tracks': [
'1: Sunflower',
'2: Whitetail',
'3: Dinosaur Act',
...
]
}
我对AlbumSerializer中的可变曲目感到困惑。似乎可变曲目与专辑和曲目模型无关。它与专辑和曲目模型有何关系?如何在AlbumSerializer中调用和调用Track模型的 unicode 方法?
答案 0 :(得分:1)
通过related_name
album = models.ForeignKey(Album, related_name='tracks')
related_name属性指定从专辑到曲目的反向关系的名称。
了解更多https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey.related_name