Return the redis key where to store the index for the given "value" (`args`)

        For this index, we store all PKs having for a field in the same sorted-set.
        Key has this form:
        model-name:field-name:sub-field-name:index-key-name
        The ':sub-field-name part' is repeated for each entry in *args that is not the final value

        Parameters
        -----------
        args: tuple
            All the "values" to take into account to get the storage key. The last entry,
            the final value, is not used.

        Returns
        -------
        str
            The redis key to use

def get_storage_key(self, *args):
        """Return the redis key where to store the index for the given "value" (`args`)

        For this index, we store all PKs having for a field in the same sorted-set.
        Key has this form:
        model-name:field-name:sub-field-name:index-key-name
        The ':sub-field-name part' is repeated for each entry in *args that is not the final value

        Parameters
        -----------
        args: tuple
            All the "values" to take into account to get the storage key. The last entry,
            the final value, is not used.

        Returns
        -------
        str
            The redis key to use

        """

        args = list(args)
        args.pop()  # final value, not needed for the storage key

        parts = [
            self.model._name,
            self.field.name,
        ] + args

        if self.prefix:
            parts.append(self.prefix)

        if self.key:
            parts.append(self.key)

        return self.field.make_key(*parts)