使用tastypie删除查询集

时间:2014-03-18 09:12:21

标签: python django rest tastypie

Tastypie允许删除资源列表中的对象。

http://django-tastypie.readthedocs.org/en/v0.9.9/interacting.html#deleting-a-whole-collection-of-resources

我想删除资源的子集。假设我有一个/api/foo/的api端点,我想用pks列表对/api/foo/进行删除,只删除那些对象,而不是集合中的所有对象。

有没有办法用tastypie做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用负责执行删除的prepend_urls添加网址。

在您的课程中,将添加以下两种方法。

根据您的需要修改代码。我先在这里进行了身份验证。

def prepend_urls(self):
    params = (self._meta.resource_name, trailing_slash())
    return [
        url(r"^(?P<resource_name>%s)/delete%s$" % params, self.wrap_view('foo_delete'), name="api_foo_delete")
    ]

    ## (?P<resource_name>%s)  will be /api/foo  if your resource name is foo

def foo_delete(self, request, **kwargs):
    """ 
    Get pks to delete from post . 
    pks = request.POST.getlist('pks[]') 
    you can use split if you are sending pks by comma separated .
    pks = (request.POST.get('pks')).split(',')
    """
    self.method_check(request, allowed=['post'])
    self.is_authenticated(request)
    if request.user and request.user.is_authenticated():
        ### perform delete operation of pk . 
        return self.create_response(request, { 'success': True })
    else:
        return self.create_response(request, { 'success': False, 'error_message': 'You are not authenticated, %s' % request.user.is_authenticated() })