5

私はdjangoアプリケーションでtastypieを使用しており、URLに指定されたタイムスタンプを持つ予約モデルにマップする「/api/booking/2011/01/01」のようなURLをマップしようとしています。ドキュメントは、これを達成する方法を説明するには不十分です。

4

1 に答える 1

12

リソースでやりたいことは、

def prepend_urls(self):
    return [
        url(r"^(?P<resource_name>%s)/(?P<year>[\d]{4})/(?P<month>{1,2})/(?<day>[\d]{1,2})%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('dispatch_list_with_date'), name="api_dispatch_list_with_date"),
    ]

メソッドは、あなたが望むことを行うビュー(私はそれをdispatch_list_with_dateと名付けました)を指すURLを返します。

たとえば、base_urls クラスでは、リソースを一覧表示するための主要なエントリ ポイントである「dispatch_list」と呼ばれるビューを指しています。おそらく、独自のフィルタリングでそれを複製したいだけでしょう。

あなたのビューはこれにかなり似ているかもしれません

def dispatch_list_with_date(self, request, resource_name, year, month, day):
    # dispatch_list accepts kwargs (model_date_field should be replaced) which 
    # then get passed as filters, eventually, to obj_get_list, it's all in this file
    # https://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py
    return dispatch_list(self, request, resource_name, model_date_field="%s-%s-%s" % year, month, day)

実際には、通常のリスト リソースにフィルターを追加するだけです。

GET /api/booking/?model_date_field=2011-01-01

これは、フィルタリング属性を Meta クラスに追加することで取得できます

しかし、それは個人的な好みです。

于 2011-08-04T03:55:47.170 に答える