

def save(self, using=None):
    '\n        Saves the current instance.\n        '
    signals.pre_save.send(sender=self.__class__, instance=self)
    using = (using or router.db_for_write(self.__class__, instance=self))
    connection = connections[using]
    if (not self.dn):
        record_exists = False
        entry = [('objectClass', self.object_classes)]
        new_dn = self.build_dn()
        for field in self._meta.fields:
            if (not field.db_column):
                continue
            value = getattr(self, field.name)
            value = modlist.get_db_prep_save(value, connection=connection)
            if value:
                entry.append((field.db_column, value))
        logger.debug(('Creating new LDAP entry %s' % new_dn))
        connection.add_s(new_dn, entry)
        self.dn = new_dn
    else:
        record_exists = True
        modlist = []
        orig = self.__class__.objects.using(using).get(pk=self.saved_pk)
        for field in self._meta.fields:
            if (not field.db_column):
                continue
            old_value = getattr(orig, field.name, None)
            new_value = getattr(self, field.name, None)
            if (old_value != new_value):
                new_value = field.get_db_prep_save(new_value, connection=connection)
                if new_value:
                    modlist.append((ldap.MOD_REPLACE, field.db_column, new_value))
                elif old_value:
                    modlist.append((ldap.MOD_DELETE, field.db_column, None))
        if len(modlist):
            new_dn = self.build_dn()
            if (new_dn != self.dn):
                logger.debug(('Renaming LDAP entry %s to %s' % (self.dn, new_dn)))
                connection.rename_s(self.dn, self.build_rdn())
                self.dn = new_dn
            logger.debug(('Modifying existing LDAP entry %s' % self.dn))
            connection.modify_s(self.dn, modlist)
        else:
            logger.debug(('No changes to be saved to LDAP entry %s' % self.dn))
    self.saved_pk = self.pk
    signals.post_save.send(sender=self.__class__, instance=self, created=(not record_exists))

dataset/ETHPy150Open django-ldapdb/django-ldapdb/ldapdb/models/base.py Model.save/VarMisuse@130/164 `field`->`modlist`