2015-05-28 47 views
0

我创建了选择期权模型:修改的Django的ModelForm选择设置

SERVICE_CHOICES = (
    ('Apps', 'Apps'), 
    ('Ask', 'Ask'), 
    ('Auth', 'Auth') 

class InputsModelExtended(models.Model): 
    service = models.CharField(max_length=1000, choices=SERVICE_CHOICES, blank=True) 

然后创建模型的形式从中:

class InputsModelExtendedForm(ModelForm): 
    class Meta: 
     model = InputsModelExtended 
     widgets = {'service': forms.fields.Select(attrs={'class': 'my_select_boxx'})} 

我通过这种形式,以模板从views.py:

def input_form(request): 
    form = InputsModelExtendedForm 
    return render(request, 'inputs_forms_css.html', {'form': form}) 

'service'select choice set可以直接从views.py中修改吗?谢谢。

+0

将这些选项放在某个Service模型中,并将服务的FK字段设置为这个模型的FK不是更好的解决方案吗? –

回答

0

当然。只需通过选择元组作为参数传递给你的窗体类当实例吧:

# some code left out for brevity 

class InputsModelExtendedForm(ModelForm): 
    class Meta: 
     model = InputsModelExtended 

    def __init__(self, *args, **kwargs): 
     service_choices = kwargs.pop('service_choices') 
     super(InputsModelExtendedForm, self).__init__(*args, **kwargs) 

     if service_choices: 
      self.fields['service'] = forms.ChoiceField(choices=service_choices, 
                 required=False) 

# example usage: 

def my_view(request): 
    service_choices = (
     ('Foo', 'Foo',), 
     ('Bar', 'Bar',), 
     ('Baz', 'Baz',), 
    ) 

    form = InputsModelExtendedForm(request.POST or None, service_choices=service_choices) 

这样你得到你的模型设置的默认值,也可以从该视图覆盖它。

+0

为我工作,谢谢! –

+0

不客气。总是乐于提供帮助。 – Brandon