Changeset 12655 for trunk


Ignore:
Timestamp:
03/30/11 16:42:11 (13 years ago)
Author:
sil
Message:
  • Fixed several bugs
    • adding objects with m2m-fields did fail
    • search routine in _setfk, fixed filter in for-loop through subfields
    • setting m2m's now done well with multiple filters
  • refactored code, and removed obsolete code
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sara_cmt/sara_cmt/django_cli.py

    r12098 r12655  
    167167        # Save object to give it an id, and make the M2M relations
    168168        if not parser.values.DRYRUN:
    169             if self.is_complete():
     169            try:
    170170                self.save()
    171             else:
    172                 logger.info('Not enough data provided')
     171            except:
     172                logger.warning('Not enough data provided')
    173173
    174174        for m2m in m2ms:
     
    181181                    self.save()
    182182                    logger.info(save_msg)
    183                 except (sqlite3.IntegrityError, ValueError), err:
     183                except (sqlite3.IntegrityError, ValueError), err: # ??? what if using non-sqlite db? ???
    184184                    logger.error(err)
    185185            else:
     
    264264        qset = models.query.EmptyQuerySet(model=to_model)
    265265        # OR-filtering QuerySets
     266        # !!! TODO: have to use Q-objects for this !!!
    266267        # !!! TODO: have to write a Custom Manager for this !!!
    267268        for subfield in subfields:
     
    272273                logger.debug('Iteration done, found: %s (%s)'%(found, type(found)))
    273274                # higher priority on the label-field:
    274                 if len(found) == 1 and subfield.name == 'label':
     275                if len(found) == 1 and (subfield.name == 'label' or subfield.name == 'name'):
    275276                    qset = found
    276277                    break
     
    296297            pass
    297298
    298     def _setm2m(self, field, value, subfields=None):
     299    def _setm2m(self, field, values, subfields=None):
    299300        """
    300301            Set a ManyToMany-relation.
    301302        """
    302303        to_model = field.rel.to
    303         values = value[0].split(',')
    304304        logger.debug("Trying to make M2M-relations to %s based on '%s'" \
    305             % (to_model.__name__, value))
     305            % (to_model.__name__, values))
    306306
    307307        # determine which fields should be searched for
     
    310310            subfields = to_model()._required_local_fields() # exclude FKs
    311311
    312         logger.debug('Searching a %s matching on fields %s' \
    313             % (to_model.__name__, [f.name for f in subfields]))
    314 
    315312        qset = models.query.EmptyQuerySet(model=to_model)
    316313        # OR-filtering QuerySets
    317314        # !!! TODO: have to write a Custom Manager for this !!!
    318315        for subfield in subfields:
    319             logger.critical('searching in field: %s' % subfield.name)
     316            logger.debug("Searching in field '%s'" % subfield.name)
    320317            qset |= to_model.objects.filter(
    321318                **{'%s__in' % subfield.name: values})
     
    332329                self.__getattribute__(field.name).add(_object)
    333330
    334         logger.critical('value to save: %s' % value)
    335 
    336 
    337331        pass
     332
    338333
    339334    def _setattr(self, field, value):
     
    358353            self._setfk(field, value)
    359354        elif isinstance(field, ManyToManyField):
    360             logger.debug('We found a M2M field, but first have to implement \
    361                 a function to handle this')
    362             pass
    363             # !!! TODO: Implement M2M relations !!!
     355            logger.debug("""Found an M2M field. Can't assign it as long as the" \
     356                object doesn't have an id, so leave this for later""")
    364357        else:
    365358            logger.debug('Trying to set attribute of %s'%type(field))
     
    490483                    self.query[key][attr] = [val]
    491484
    492         logger.debug("push_args built query '%s' from args '%s'" \
    493             % (self.query, args))
     485        logger.debug("push_args built query '%s'" % self.query)
    494486
    495487    def get_query(self):
Note: See TracChangeset for help on using the changeset viewer.