有没有办法订购嵌套的序列化程序_set,例如order by pk或time-stamp.
所以基本上song_set在下面的json数据中显示的顺序是从最相邻的最新对象创建的,在本例中是order_by('-timestamp')或order_by('-pk').
Json数据
{
"pk": 151,
"album_name": "Name",
"song_set": [
{
pk: 3,
timestamp: '5 seconds'
},
{
pk: 2,
timestamp: '10 seconds'
},
{
pk: 1,
timestamp: '15 seconds'
}
]
}
Run Code Online (Sandbox Code Playgroud)
模型
class Album(models.Model):
album_name = models.CharField(max_length=100, blank=True)
class Song(models.Model):
album = models.ForeignKey('album.Album', default=1)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
Run Code Online (Sandbox Code Playgroud)
Searilizer
class SongListSerializer(HyperlinkedModelSerializer):
class Meta:
model = Song
fields = [
'pk',
'timestamp'
]
class AlbumSerializer(HyperlinkedModelSerializer):
song_set …Run Code Online (Sandbox Code Playgroud) 我如何将“示例对象”映射到 url: website.com/api/<user>/<slug>。
我收到这个
invalid literal for int() with base 10: 'username'错误。所以我知道我需要使用用户 ID 才能映射到对象,这是因为如果我使用 user_id(整数)(url:)website.com/api/<user_id>/<slug>而不是用户/用户名,我就可以映射到对象(细绳)。
当映射到对象从 user_id(整数)到另一个字段(如用户(字符串))时,有没有办法覆盖默认值?
我也不明白为什么def get_object在(Api 视图)中传递用户而不是 user_id不能解决这个问题。
网址
urlpatterns = [
url(r'^api/(?P<user>\w+)/(?P<slug>[\w-]+)/$', ExampleDetailAPIView.as_view(), name='example'),
]
Run Code Online (Sandbox Code Playgroud)
接口视图
class ExampleDetailAPIView(RetrieveAPIView):
queryset = Example.objects.all()
serializer_class = ExampleDetailSerializer
def get_object(self):
user = self.kwargs.get('user')
slug = self.kwargs.get('slug')
return Example.objects.get(user=user, slug=slug)
def get_serilizer_context(self, *args, **kwargs):
return {'request': self.request}
Run Code Online (Sandbox Code Playgroud)
序列化器
class ExampleDetailSerializer(HyperlinkedModelSerializer):
url = serializers.SerializerMethodField()
class Meta:
model = Example
fields = [
'url',
]
def get_url(self, …Run Code Online (Sandbox Code Playgroud)