Tastypie网址和过滤器

时间:2013-01-25 21:15:50

标签: tastypie

我想使用tastypie和一些略有不同的网址。我希望他们是这样的:

/ API / V1 /城市/伦敦/ make_default / API / V1 /城市/巴黎/ make_default / API / V1 /城市/新加坡/ remove_city

城市本身可以是我的数据库中城市表中的任何城市,资源名称是我想要执行的方法。每种方法都有自己的资源。在tastypie中,网址似乎给我带来了一些麻烦。 prepend_urls,我一直给我301重定向。

class CityResource(Resource):
    class Meta

     def make_default(self, request, city_name):
        return super(ViewTemplateResource, self).get_object_list(request)\
                        .filter(name=city_name, client=request.user).update(default=True)

    def prepend_urls(self):
        return [
            url(r"^city/(?P<city_id>[\w\d_.-]+)/(?P<resource_name>%s)/$" % self._meta.resource_name,
                                   self.wrap_view('make_default')),
                ]

1 个答案:

答案 0 :(得分:0)

所以要解决这个问题,我的做法有点不同:

首先,环绕视图避开了正常的tastypie路径而不是添加它:

def dispatch_default(self, request, city_name, **kwargs):
    self.queryset = City.objects.filter(name=city_name, client=user)
    return self.dispatch('detail', request, **kwargs)  # could use super here too instead of copying the normal code


def prepend_urls(self):
        return [
            url(r"^city/(.+)/(?P<resource_name>%s)$" % self._meta.resource_name,
                                   self.wrap_view('dispatch_detail')),
                ]