Reputation: 3574
I have Django Model which has two properties:
class M(Model):
@property
def p1(self):
return process_result(SomeModel.objects.filter(val_gt=1))
@property
def p2(self):
return process_result(SomeModel.objects.filter(val_lt=1))
And both used in Django Admin list_lisplay = ('p1','p2',)
I want to replace 2 database queries with 1, something like this
class M(Model):
def some_hook(self):
res = SomeModel.objects.all()
self.p1 = process_result(filter(lambda l:l.val > 10, res))
self.p2 = process_result(filter(lambda l:l.val < 10, res))
PS: problem with >10 or <10
is just an example for simplification, I am only trying to find a way how to define multiple properties with performing one common database query
Upvotes: 0
Views: 59
Reputation: 7386
You can try to cache your queryset result in model:
class M(Model):
def get_some_model(self):
attr_name = '_some_model_cache'
if hasattr(self, attr_name):
return getattr(self, attr_name)
qs = SomeModel.objects.all()
setattr(self, attr_name, qs)
return qs
@property
def p1(self):
return process_result(filter(lambda l:l.val > 10, self.get_some_model()))
@property
def p2(self):
return process_result(filter(lambda l:l.val < 10, self.get_some_model()))
Upvotes: 1