我查看了 Tastypie 的文档并搜索了一段时间,但似乎无法找到答案。
假设我们有两个模型:Student
和Assignment
,它们之间存在一对多的关系。该Assignment
模型包括一个assignment_date
字段。基本上,我想使用 Tastypie 构建一个 API,它返回按最近分配日期排序的Student
对象。排序是在服务器还是在客户端完成并不重要——但无论在哪里完成排序,都需要排序。assignment_date
想法#1:只需与学生一起返回作业。
class StudentResource(ModelResource):
assignments = fields.OneToManyField(
AssignmentResource, 'assignments', full=True)
class Meta:
queryset = models.Student.objects.all()
resource_name = 'student'
不幸的是,每个学生可能有数十或数百个作业,因此这是臃肿且不必要的。
想法#2:在脱水循环期间增加数据。
class StudentResource(ModelResource):
class Meta:
queryset = models.Student.objects.all()
resource_name = 'student'
def dehydrate(self, bundle):
bundle.data['last_assignment_date'] = (models.Assignment
.filter(student=bundle.data['id'])
.order_by('assignment_date')[0].assignment_date)
这并不理想,因为它将为每个学生记录执行单独的数据库往返。它也不是很具有声明性,也不是优雅的。
那么,有没有一种很好的方法可以通过 Tastypie 获得这种功能?还是有更好的方法来做我想要实现的目标?