2015-01-29 2 views
-1

В моем пользовательском Workflow у меня есть действие, которое, помимо прочего, должно предоставить пользователю список доступных изображений и вкусов OpenStack. Мое предположение заключается в том, что наилучшее место для заполнения этих двух списков - это метод __init__. В настоящее время шахта выглядит следующим образом:Как правильно называть __init__ на рабочем столе Horizon. Action

class SetWorkflowInfoAction(workflows.Action): 
    name = forms.CharField(max_length="255", label=_("Workload Name")) 
    description = forms.CharField(widget=forms.Textarea, 
            label=_("Description"), required=False) 
    image_choices = [] 
    images = forms.ChoiceField(label=_("Images"), choices=image_choices) 
    flavor_choices = [] 
    flavors = forms.ChoiceField(label=_("Flavors"), choices=flavor_choices) 

    def __init__(self, request, image_choices=image_choices, flavor_choices=flavor_choices, 
       *args, **kwargs): 
     super(SetWorkflowInfoAction, self).__init__(request, *args, **kwargs) 

     image_choices = [] 
     flavor_choices = [] 

     images, self._more, self._prev = api.glance.image_list_detailed(
      self.request) 
     flavors = api.nova.flavor_list(request, True) 

     for image in images: 
       image_choices.append((image.id, image.name)) 
     if len(image_choices) > 1: 
      image_choices.insert(0, ('', _("Select an Image"))) 
     self.fields['images'].choices = image_choices 

     for flavor in flavors: 
       flavor_choices.append((flavor.id, flavor.name)) 
     if len(flavor_choices) > 1: 
      flavor_choices.insert(0, ('', _("Select an Flavor"))) 
     self.fields['flavors'].choices = flavor_choices 

    class Meta: 
     name = _("Basic Workload Information") 
     help_text = _("") 
     slug = "set_workflow_info" 

Беда - когда я добираюсь до точки вызова __init__ я получаю эту ошибку:

File "/home/eugene/dev/horizon/openstack_dashboard/dashboards/mydashboard/workloads_panel/workflows.py", line 20, in __init__ 
    super(SetWorkflowInfoAction, self).__init__(request, *args, **kwargs) 
TypeError: __init__() takes at least 3 arguments (2 given) 

Что такое правильный способ вызова __init__ в таком так что я мог бы заполнить свои изображения и списки ароматов?

ответ

0

Все, что мне было нужно для выполнения этой работы, было удаление двух неиспользуемых аргументов из верхнего уровня ini.

Таким образом, рабочая версия выглядит следующим образом:

class SetWorkflowInfoAction(workflows.Action): 
    name = forms.CharField(max_length="255", label=_("Workload Name")) 
    description = forms.CharField(widget=forms.Textarea, 
            label=_("Description"), required=False) 
    image_choices = [] 
    images = forms.ChoiceField(label=_("Images"), choices=image_choices) 
    flavor_choices = [] 
    flavors = forms.ChoiceField(label=_("Flavors"), choices=flavor_choices) 

    def __init__(self, request, 
       *args, **kwargs): 
     super(SetWorkflowInfoAction, self).__init__(request, *args, **kwargs) 

     image_choices = [] 
     flavor_choices = [] 

     images, self._more, self._prev = api.glance.image_list_detailed(
      self.request) 
     flavors = api.nova.flavor_list(request, True) 

     for image in images: 
       image_choices.append((image.id, image.name)) 
     if len(image_choices) > 1: 
      image_choices.insert(0, ('', _("Select an Image"))) 
     self.fields['images'].choices = image_choices 

     for flavor in flavors: 
       flavor_choices.append((flavor.id, flavor.name)) 
     if len(flavor_choices) > 1: 
      flavor_choices.insert(0, ('', _("Select an Flavor"))) 
     self.fields['flavors'].choices = flavor_choices 

    class Meta: 
     name = _("Basic Workload Information") 
     help_text = _("") 
     slug = "set_workflow_info" 
Смежные вопросы