Nit*_*tin 19 python django-rest-framework
基本上我有这样的模型:
class Playlist(models.Model):
key = models.CharField(max_length=255,blank=True, unique=True)
user = models.ForeignKey(User)
title = models.CharField(max_length=200)
pub_date = models.DateTimeField(auto_now_add=True)
videos = models.ManyToManyField(Video, through='PlaylistVideo')
class PlaylistVideo(models.Model):
playlist = models.ForeignKey(Playlist)
video = models.ForeignKey(Video)
position = models.IntegerField()
class Video(models.Model):
title = models.CharField(max_length=255,blank=True)
description = models.TextField(blank=True)
thumb = models.URLField(blank=True)
duration = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
现在我想要一个API来返回这样的PLAYLISTS ...但是视频应该按PlaylistVideo模型中的POSITION排序
{
"key": "h8x3",
"title": "First Playlist",
"pub_date": "2012-10-11T17:00:26Z",
"videos": [
{
....
},
{
....
}
]
},
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
如果你已经设法解决了你的问题,我不太确定,但我自己也遇到了这个问题,并设法让它像这样做:
创建一个这样的自定义序列化器:
class PlaylistVideoSerializer(serializers.HyperlinkedModelSerializer):
title = serializers.ReadOnlyField(video.title)
description = serializers.ReadOnlyField(video.description)
thumb = serializers.ReadOnlyField(video.thumb)
duration = serializers.ReadOnlyField(video.duration)
class Meta:
# your associative entity here
model = PlaylistVideo
fields = ('title', 'description', 'thumb', 'duration')
Run Code Online (Sandbox Code Playgroud)
在这里,我假设你想显示视频实体/表格下的所有字段.随意调整您的需求/喜好.
然后,你需要做的就是这个
class PlaylistSerializer(serializers.ModelSerializer):
videos = PlaylistVideoSerializer(source='playlistvideo_set', many=True)
class Meta:
model = Playlist
fields = ('key', 'title', 'pub_dates', 'videos')
Run Code Online (Sandbox Code Playgroud)
注意:始终确保源引用关联实体.否则你会得到一个空的json列表.
希望这可以帮助那些面临类似问题的人.
我们确实需要添加一些有关“通过”关系的文档。
与此同时,这个讨论可能会有所帮助:
https://groups.google.com/forum/#!topic/django-rest-framework/xzOhjILq3xA/discussion
| 归档时间: |
|
| 查看次数: |
5153 次 |
| 最近记录: |