code: def set(self, value):
          
          # Deny updating of an already set pk
          if self._set:
              raise ValueError('A primary key cannot be updated')
  
          # Validate and return the value to be used as a pk
          value = self._validate(value)
  
          # Tell the model the pk is now set
          self._instance._set_pk(value)
          self._set = True
  
          # We have a new pk, so add it to the collection
          log.debug("Adding %s in %s collection" % (value, self._model._name))
          self.connection.sadd(self.collection_key, value)
  
          # Finally return 1 as we did a real redis call to the set command
          return 1
docs: Override the default setter to check uniqueness, deny updating, and add
          the new pk to the model's collection.
          The value is not saved as a field in redis, because we don't need this.
          On an instance, we have the _pk attribute with the pk value, and when
          we ask for a collection, we get somes pks which can be used to instanciate
          new objects (holding the pk value in _pk)