形成ModelChoiceField查询集+额外选择字段django表单

sus*_*ush 7 django django-forms

我正在尝试创建一个表单,在ModelChoiceField从queryset加载,我想向ModelChoiceField添加一些自定义值,我已经使用了选择字段,如下所示,但在更新表单时,得到以下错误

表单错误:选择有效选项.这种选择不是可用的选择之一.

代码:

 self.fields['lead'] = forms.ModelChoiceField(queryset = Pepole.objects.filter(poc__in       = ('lead','sr.lead')))
 self.fields['lead2'] = forms.ModelChoiceField(queryset = Pepole.objects.filter(role__in = ('lead','sr.lead')))
      choice_field = self.fields['lead']                                    
      choice_field.choices = list(choice_field.choices) + [('None', 'None')]
      choice_field = self.fields['lead2']                                    
      choice_field.choices = list(choice_field.choices) + [('None', 'None')]
Run Code Online (Sandbox Code Playgroud)

我在这做错了吗?

Yuj*_*ita 16

那不行.看看它是如何ModelChoiceField工作的:

try:
    key = self.to_field_name or 'pk'
    value = self.queryset.get(**{key: value})
except self.queryset.model.DoesNotExist:
    raise ValidationError(self.error_messages['invalid_choice'])
return value
Run Code Online (Sandbox Code Playgroud)

你不能随便添加一些东西.

使用ChoiceField替代和自定义处理数据.

class TestForm(forms.Form):
    mychoicefield = forms.ChoiceField(choices=QS_CHOICES)

    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs)
        self.fields['mychoicefield'].choices = \
            list(self.fields['mychoicefield'].choices) + [('new stuff', 'new')]

    def clean_mychoicefield(self):
        data = self.cleaned_data.get('mychoicefield')
        if data in QS_CHOICES:
            try:
                data = MyModel.objects.get(id=data)
            except MyModel.DoesNotExist:
                raise forms.ValidationError('foo')
        return data
Run Code Online (Sandbox Code Playgroud)