1

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 でこの種の機能を取得する良い方法はありますか? または、私が達成しようとしていることを行うためのより良い方法はありますか?

4

1 に答える 1

1

ModelResource をフィールド名で並べ替えることができます。ドキュメントのこの部分をチェックしてくださいhttp://django-tastypie.readthedocs.org/en/latest/resources.html#ordering

モデルでデフォルトでこの順序を設定することもできます: https://docs.djangoproject.com/en/dev/ref/models/options/#ordering

于 2012-12-27T16:43:48.697 に答える