2011-08-03 2 views
4

私はdjangoアプリケーションでtastypieを使用していますが、指定されたタイムスタンプを持つBookingモデルにマップする "/ api/booking/2011/01/01"のようなURLをマップするようにしていますURLにドキュメントはこれを達成する方法を伝えるのには不十分です。あなたのリソースに何をしたいのかTESTYYのREST URL

答えて

11

は何をしたいんビュー(私はそれをdispatch_list_with_dateという名前)を指すURLを返し

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"), 
    ] 

方法を、提供します。

たとえば、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 

filterを追加するかもしれないあなたは、あなたにフィルタリング属性を追加することで、これを取得することができますメタクラス

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

+0

ああ、私は前者を達成したいと思えば、それはおそらく味覚を使用しない方が良いと思います。とにかく私はvanilla djangoのurl_confで実装できるからです。 – sw00

+0

私は余分な機能とTastypieの書式設定にかなり部分的ですが、確かに、常に猫をスキンする方法は複数あります。 –

+0

偉大な例をありがとう!非常に便利。 – Spike

関連する問題