コード例 #1
0
 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)
コード例 #2
0
    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