def handle(self, *trackable_model_specs, **options): for model_spec in trackable_model_specs: print "Processing messages for trackable model %s" % (model_spec) try: app_label,model = model_spec.split('.') model_cls = get_model(app_label,model) if model_cls is None: raise CommandError("Unknown model: %s.%s" % (app_label,model)) except ValueError: raise CommandError("Use full appname.ModelName specification for argument %s" % model_spec) try: site.get_parent( model_cls ) except NotRegistered, e: raise CommandError( str(e) ) cnt = connection.process_messages(model_cls=model_cls)
def handle_model_data_migration( self, model_cls, trackable_model_cls, update_fields={}, key_fields={}, link_field='parent', match_spec=None, max_records=0, order_by=[] ): """ """ print "Conversion parameters: " print " Source: %s" % (model_cls._meta.verbose_name) print " Destination: %s" % (trackable_model_cls._meta.verbose_name) print " Update fields: %s" % (update_fields) print " Key fields: %s" % (key_fields) print " Link field: %s" % (link_field) print " Match spec: %s" % (match_spec) print " Max records: %d" % (max_records) print " Order by: %s" % (order_by) parent_model_cls = site.get_parent( trackable_model_cls ) source_queryset = model_cls.objects.all() if order_by: source_queryset = source_queryset.order_by(*order_by) if max_records: source_queryset = source_queryset[:max_records] instance_cnt = source_queryset.count() progress_cnt = 0 for old_instance in source_queryset: parent_object_id = None if match_spec: match_parts = match_spec.split(':') if len(match_parts) == 2: source_attr,model_spec = match_parts dest_attr = source_attr elif len(match_parts) == 3: source_attr,model_spec,dest_attr = match_parts else: raise CommandError("Invalid match_spec option: %s" % match_spec) try: parent_model_cls = get_model(*model_spec.split('.')) source_attr_links = source_attr.split('.') source_attr = getattr(old_instance,source_attr_links[0]) for link in source_attr_links[1:]: source_attr = getattr(source_attr,link) source_attr_value = source_attr parent_kwargs = {dest_attr:source_attr_value} parent_instance = parent_model_cls.objects.get(**parent_kwargs) parent_object_id = parent_instance.pk except AttributeError, e: raise e except parent_model_cls.DoesNotExist, e: continue