diff --git a/pynamodb/indexes.py b/pynamodb/indexes.py index 9cba18621..557a04b64 100644 --- a/pynamodb/indexes.py +++ b/pynamodb/indexes.py @@ -55,9 +55,8 @@ def __init__(self) -> None: if not hasattr(self.Meta, "projection"): raise ValueError("No projection defined, define a projection for this class") - @classmethod def count( - cls, + self, hash_key: _KeyType, range_key_condition: Optional[Condition] = None, filter_condition: Optional[Condition] = None, @@ -68,19 +67,18 @@ def count( """ Count on an index """ - return cls.Meta.model.count( + return self._model.count( hash_key, range_key_condition=range_key_condition, filter_condition=filter_condition, - index_name=cls.Meta.index_name, + index_name=self.Meta.index_name, consistent_read=consistent_read, limit=limit, rate_limit=rate_limit, ) - @classmethod def query( - cls, + self, hash_key: _KeyType, range_key_condition: Optional[Condition] = None, filter_condition: Optional[Condition] = None, @@ -95,12 +93,12 @@ def query( """ Queries an index """ - return cls.Meta.model.query( + return self._model.query( hash_key, range_key_condition=range_key_condition, filter_condition=filter_condition, consistent_read=consistent_read, - index_name=cls.Meta.index_name, + index_name=self.Meta.index_name, scan_index_forward=scan_index_forward, limit=limit, last_evaluated_key=last_evaluated_key, @@ -109,9 +107,8 @@ def query( rate_limit=rate_limit, ) - @classmethod def scan( - cls, + self, filter_condition: Optional[Condition] = None, segment: Optional[int] = None, total_segments: Optional[int] = None, @@ -125,7 +122,7 @@ def scan( """ Scans an index """ - return cls.Meta.model.scan( + return self._model.scan( filter_condition=filter_condition, segment=segment, total_segments=total_segments, @@ -133,7 +130,7 @@ def scan( last_evaluated_key=last_evaluated_key, page_size=page_size, consistent_read=consistent_read, - index_name=cls.Meta.index_name, + index_name=self.Meta.index_name, rate_limit=rate_limit, attributes_to_get=attributes_to_get, ) diff --git a/pynamodb/models.py b/pynamodb/models.py index 3faa0d2e3..d199c9fcf 100644 --- a/pynamodb/models.py +++ b/pynamodb/models.py @@ -243,7 +243,7 @@ def __init__(self, name: str, bases: Any, attrs: Dict[str, Any]) -> None: if not hasattr(attr_obj, 'aws_session_token'): setattr(attr_obj, 'aws_session_token', None) elif isinstance(attr_obj, Index): - attr_obj.Meta.model = cls + attr_obj._model = cls if not hasattr(attr_obj.Meta, "index_name"): attr_obj.Meta.index_name = attr_name elif isinstance(attr_obj, Attribute): @@ -452,7 +452,7 @@ def refresh(self, consistent_read: bool = False) -> None: :param consistent_read: If True, then a consistent read is performed. :raises ModelInstance.DoesNotExist: if the object to be updated does not exist """ - args, kwargs = self._get_save_args(attributes=False) + args, kwargs = self._get_save_args(attributes=False, null_check=False) kwargs.setdefault('consistent_read', consistent_read) attrs = self._get_connection().get_item(*args, **kwargs) item_data = attrs.get(ITEM, None)