def test_add_model_field(self): album = Album.objects.get(pk=1) result = { f.attname: getattr(album, f.attname) for f in album._meta.fields } result['another_field'] = '1' key = cache_keys.key_of_model(Album, pk=1) cache.set(key, result) key = cache_keys.key_of_model_list(Album, artist="Taylor Swift") cache.set(key, [result]) album = cache.get_model(Album, pk=1) self.assertRaises(AttributeError, lambda: album.another_field)
def get_model_list(self, cls, **kwargs): ''' get multiple models in one key ''' key = cache_keys.key_of_model_list(cls, **kwargs) models = self.get(key) if models: fields = set([f.attname for f in cls._meta.fields]) for model in models: attrs_keys = set(model.keys()) diff = attrs_keys - fields for key in diff: model.pop(key) return [cls(**model) for model in models] models = list(cls.objects.filter(**kwargs)) data = [self.get_attrs(m) for m in models] self.set(key, data) return models
def _make_model_list_key(self, instance, *args): kwargs = dict([(field, getattr(instance, field)) for field in args]) key = cache_keys.key_of_model_list(instance.__class__, **kwargs) return key
def set_model_list(self, cls, models=None, **kwargs): key = cache_keys.key_of_model_list(cls, **kwargs) if models is None: models = list(cls.objects.filter(**kwargs)) data = [self.get_attrs(m) for m in models] self.set(key, data)