django rest framework 外鍵序列化方法與問題總結


 

為前端提供數據時,往往是這樣的json

{
'album_name': 'Undun',
'artist': 'The Roots',
'tracks': 01
}......

如果需要外鍵字段對應表的詳細信息,像這樣

{
'album_name': 'The Grey Album',
'artist': 'Danger Mouse',
'tracks': [
{'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
{'order': 2, 'title': 'What More Can I Say', 'duration': 264},
{'order': 3, 'title': 'Encore', 'duration': 159},
...
],
}
要怎么配置?
查看 django rest framework 官網說明http://www.django-rest-framework.org/api-guide/relations/  

雖然講到了怎么操作,但是不詳細,屢屢遇坑

所用到的model

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, on_delete=models.CASCADE)
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 TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('order', 'title', 'duration')

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

class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
好像搞定了,運行起來才發現有個坑
Got AttributeError when attempting to get a value for field 'tracks' on serializer 'AlbumSerializer'
沒有tracks字段,咋整?
原來只要在model foreignkey里面添加
related_name='tracks',
album = models.ForeignKey(Album, related_name='tracks', on_delete=models.CASCADE)
就搞定了。。

官網例子里有,但是很容易忽略,這里提出來,希望大家注意

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM