我浏览了Tastypie的文档并搜索了一段时间,但似乎找不到答案。

假设我们有两个模型:StudentAssignment,它们之间是一对多的关系。 Assignment模型包括一个assignment_date字段。基本上,我想使用Tastypie构建一个API,该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获得这种功能吗?还是有更好的方法来完成我要达到的目标?

最佳答案

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

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

关于python - Tastypie:包括相关模型的计算字段吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14048531/

10-10 08:55