def get(self, **kwargs):
"""
Similar to the Django ORM's QuerySet.get
:param kwargs: it supports the same kwargs as filter does
"""
params = self.params.copy()
params.update(kwargs)
params = self._preprocess_filter_params(params)
pk = self.model._primary_key()
if set(params) - {'select_related'} == {pk}:
url = self.model._resource_url(params[pk])
del params[pk]
if params:
result = self.model._rest_call(url, params=params)
else:
result = self.model._rest_call(url)
else:
url = self.model._resources_url()
params['limit'] = 1
json_ = self.model._rest_call(url, params=params)
count = json_['count']
if count == 0:
raise self.model.DoesNotExist(
"%s matching query does not exist." % self.model.__name__
)
if count >= 2:
raise MultipleObjectsReturned(
"get() returned more than one %s -- it returned %d!" % (self.model.__name__, count)
)
result = json_['results'][0]
obj = self.model(**result)
obj._persisted = True
return obj
评论列表
文章目录