我的模型上有“创建”时间戳。它们会在一天后过期,应该重新创建。
GET
当客户端尝试从 TastyPie API 获取资源时,我如何获得代码,我检查资源是否已过期并执行业务逻辑。我知道可以使用 filter 过滤掉过期的资源,但是我可以删除过期的资源并创建新的资源,然后在结果中返回它们吗?
我的模型上有“创建”时间戳。它们会在一天后过期,应该重新创建。
GET
当客户端尝试从 TastyPie API 获取资源时,我如何获得代码,我检查资源是否已过期并执行业务逻辑。我知道可以使用 filter 过滤掉过期的资源,但是我可以删除过期的资源并创建新的资源,然后在结果中返回它们吗?
更好的方法是重写该get_object_list
方法。这记录在这里:http ://django-tastypie.readthedocs.org/en/latest/cookbook.html#per-request-alterations-to-the-queryset
是的你可以。例如,您可以覆盖资源的obj_get()
方法。
它的源代码在这里:https ://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py#L1895 ,看起来像这样:
def obj_get(self, request=None, **kwargs):
"""
A ORM-specific implementation of ``obj_get``.
Takes optional ``kwargs``, which are used to narrow the query to find
the instance.
"""
try:
base_object_list = self.get_object_list(request).filter(**kwargs)
object_list = self.apply_authorization_limits(request, base_object_list)
stringified_kwargs = ', '.join(
["%s=%s" % (k, v) for k, v in kwargs.items()]
)
if len(object_list) <= 0:
raise self._meta.object_class.DoesNotExist(
"Couldn't find an instance of '%s' which matched '%s'." %
(self._meta.object_class.__name__, stringified_kwargs)
)
elif len(object_list) > 1:
raise MultipleObjectsReturned(
"More than '%s' matched '%s'." % (
self._meta.object_class.__name__,
stringified_kwargs
)
)
return object_list[0]
except ValueError:
raise NotFound(
"Invalid resource lookup data provided (mismatched type)."
)
您可以检查object_list
该代码中获得的内容,然后应用适当的操作。
或者,您可以通过使用on the way覆盖专门处理对单个资源的请求的get_detail()
方法。GET
obj_get()