在Django中实现透视
我想要一个Django视图来查询模型,如果没有找到任何东西,就使用一个对象来尝试从internet获取信息 我想做的是这样的:在Django中实现透视,django,Django,我想要一个Django视图来查询模型,如果没有找到任何东西,就使用一个对象来尝试从internet获取信息 我想做的是这样的: def my_view(request, foo): try: bar = ModelClass.objects.get(property=foo) except Question.DoesNotExist: bar = api_object.get(foo) 我想避免的是: def my_view(request, f
def my_view(request, foo):
try:
bar = ModelClass.objects.get(property=foo)
except Question.DoesNotExist:
bar = api_object.get(foo)
我想避免的是:
def my_view(request, foo):
try:
bar = ModelClass.objects.get(property=foo)
except Question.DoesNotExist:
api_object = ApiObject()
bar = api_object.get(foo)
如何做到这一点,使我不必每次都构造
api\u对象
Django惯用的方法是通过定制。所以我会这样做
class MyManager(models.Manager):
def get_or_fetch(self, property):
queryset = self.get_queryset()
try:
return queryset.model.get(property=property)
except queryset.model.DoesNotExist:
return api_object.get(property)
class ModelClass(models.Model):
objects = MyManager()
# in your view
bar = ModelClass.objects.get_or_fetch(property=foo)
Django惯用的方法是通过定制。所以我会这样做
class MyManager(models.Manager):
def get_or_fetch(self, property):
queryset = self.get_queryset()
try:
return queryset.model.get(property=property)
except queryset.model.DoesNotExist:
return api_object.get(property)
class ModelClass(models.Model):
objects = MyManager()
# in your view
bar = ModelClass.objects.get_or_fetch(property=foo)
对不起,也许问题不清楚。我如何做到这一点,使
api\u对象
在启动时只创建一次,然后只存在于我的视图/管理器的名称空间中?我想我可以通过将api\u对象
设置为MyManager
的属性来解决这个问题。@Batman这很有效。您还可以将其放入Django在开始时加载的任何文件中。诚实取决于你的品味,但让它成为经理的财产是公平的。对不起,也许问题不清楚。我如何做到这一点,使api\u对象
在启动时只创建一次,然后只存在于我的视图/管理器的名称空间中?我想我可以通过将api\u对象
设置为MyManager
的属性来解决这个问题。@Batman这很有效。您还可以将其放入Django在开始时加载的任何文件中。诚实取决于你的品味,但让它成为经理的财产是公平的。