Tastypie のドキュメントを調べてしばらく検索しましたが、これに対する答えが見つからないようです。
と の 2 つのモデルがStudent
ありAssignment
、それらの間に 1 対多の関係があるとします。Assignment
モデルにはフィールドが含まれていassignment_date
ます。基本的に、Tastypie を使用して、最新の割り当て日で並べ替えられたStudent
オブジェクトを返す API を構築したいと考えています。並べ替えがサーバー側で行われるか、クライアント側で行われるかは問題ではありませんが、並べ替えが行われる場所で並べ替える必要があります。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 でこの種の機能を取得する良い方法はありますか? または、私が達成しようとしていることを行うためのより良い方法はありますか?