Tastypie:包括相关模型的计算字段?

时间:2012-12-27 02:03:09

标签: python django tastypie

我查看了Tastypie的文档并搜索了一段时间,但似乎无法找到答案。

假设我们有两个模型:StudentAssignment,它们之间有一对多的关系。 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的这种功能?或者有更好的方法来做我想要实现的目标吗?

1 个答案:

答案 0 :(得分:1)

您可以按字段名称对ModelResource进行排序。查看文档http://django-tastypie.readthedocs.org/en/latest/resources.html#ordering

的这一部分

您也可以在模型中默认设置此排序:https://docs.djangoproject.com/en/dev/ref/models/options/#ordering