From cbc59280b89cad9748e69f29fc6b4a2ff274ed03 Mon Sep 17 00:00:00 2001 From: Shyamala Gopalakrishnan Date: Wed, 19 Aug 2020 11:49:44 +0400 Subject: [PATCH] Add custom update method --- eav/models.py | 2 +- eav/queryset.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/eav/models.py b/eav/models.py index 32a028e..48dc7b0 100644 --- a/eav/models.py +++ b/eav/models.py @@ -572,7 +572,7 @@ class Entity(object): for attribute in self.get_all_attributes(): if self._hasattr(attribute.slug): attribute_value = self._getattr(attribute.slug) - if attribute.datatype == Attribute.TYPE_ENUM and not isinstance(attribute_value, EnumValue): + if attribute.datatype == Attribute.TYPE_ENUM and not isinstance(attribute_value, EnumValue) and attribute_value: attribute_value = EnumValue.objects.get(value=attribute_value) if attribute.datatype == Attribute.TYPE_ENUM_MULTI: attribute_value = [ diff --git a/eav/queryset.py b/eav/queryset.py index ff5038f..ed3deb5 100644 --- a/eav/queryset.py +++ b/eav/queryset.py @@ -376,3 +376,23 @@ class EavQuerySet(QuerySet): order_clauses.append(term[0]) return QuerySet.order_by(query_clause, *order_clauses) + + def update(self, **kwargs): + config_cls = getattr(self.model, '_eav_config_cls', None) + + prefix = '%s__' % config_cls.eav_attr + new_kwargs = {} + eav_kwargs = {} + + for key, value in kwargs.items(): + if key.startswith(prefix): + eav_kwargs.update({key[len(prefix):]: value}) + else: + new_kwargs.update({key: value}) + + obj = self.first() + obj_eav = getattr(obj, config_cls.eav_attr) + for key, value in eav_kwargs.items(): + setattr(obj_eav, key, value) + obj.save() + return super(EavQuerySet, self).update(**new_kwargs)