Python 是否可以使用TastyPie对ToManyField属性中的元素进行排序?
我有一个使用Django Tastypie的RESTAPI。给定以下代码 模型Python 是否可以使用TastyPie对ToManyField属性中的元素进行排序?,python,django,rest,tastypie,Python,Django,Rest,Tastypie,我有一个使用Django Tastypie的RESTAPI。给定以下代码 模型 class BlogPost(models.Model): # class body omitted, it has a content and an author class Comment(models.Model): blog_post = models.ForeignKey(BlogPost, related_name="comments") published = models.
class BlogPost(models.Model):
# class body omitted, it has a content and an author
class Comment(models.Model):
blog_post = models.ForeignKey(BlogPost, related_name="comments")
published = models.DateTimeField()
# rest of class omitted
资源
class CommentResource:
# omitted
class BlogPostResource(ModelResource):
comments = fields.ToManyField("resources.CommentResource",
attribute="comments")
当我要求一篇博客文章时,我得到了如下信息:
GET: api/blogpost/4/
{
'content' : "....",
'author' : "....",
'comments' : ['api/comment/4/', 'api/comment/5']
}
但是,注释不一定按任何字段排序。我想确保它们是按特定键排序的(published
)
有什么办法可以做到这一点吗?我通过将
BlogPostResource
中的字段更改为以下内容,成功地解决了这个问题:
class BlogPostResource(ModelResource):
comments = fields.ToManyField("resources.CommentResource",
attribute=lambda bundle: bundle.obj.comments.all().order_by("published"))
您还可以尝试在实际注释模型(而不是在tastypie注释模型资源中)中添加顺序:
如果我这样做,评论就不会分页
class Comment(models.Model):
blog_post = models.ForeignKey(BlogPost, related_name="comments")
published = models.DateTimeField()
class Meta:
ordering = ['published']