ОТДЫХ URL с вкусным пирогом - PullRequest
       0

ОТДЫХ URL с вкусным пирогом

5 голосов
/ 03 августа 2011

Я использую tastypie в своем приложении django и пытаюсь заставить его отображать URL-адреса, например "/ api / booking / 2011/01/01", который сопоставляется с моделью бронирования с указанной меткой времени в URL-адресе.В документации не говорится, как этого добиться.

1 Ответ

12 голосов
/ 04 августа 2011

То, что вы хотите сделать в вашем ресурсе, это предоставить

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

метод, который возвращает URL, который указывает на представление (я назвал его 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

Это можно получить, добавив атрибут фильтрации в свой мета-класс

Но это личное предпочтение.

...