2017-04-22 25 views
0

我在这找到了答案 How to set choices in dynamic with Django choicefield?
maersu post对我的问题投了很多票。
Django动力ChoiceFields从API中的选择引发ValueError

get_branch()的输出是["first_branch", "second_branch"]

django==1.11
python 3.6.0

forms.py

class FactoryPOSForm(forms.ModelForm): 
    branch_name = forms.ChoiceField(choices=['aa', 'bb']) 

    class Meta: 
     model = FactoryPOS 
     fields = [ 
      'branch_name', 
      'dealer_name', 
      'shop_name', 
      'factory', 
     ] 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.fields['branch_name'].choices = get_branches() 

错误:

File "/Users/el/.pyenv/versions/eneos-factory/lib/python3.6/site-packages/django/forms/boundfield.py", line 250, in build_widget_attrs 
    if widget.use_required_attribute(self.initial) and self.field.required and self.form.use_required_attribute: 
    File "/Users/el/.pyenv/versions/eneos-factory/lib/python3.6/site-packages/django/forms/widgets.py", line 690, in use_required_attribute 
    return use_required_attribute and first_choice is not None and self._choice_has_empty_value(first_choice) 
    File "/Users/el/.pyenv/versions/eneos-factory/lib/python3.6/site-packages/django/forms/widgets.py", line 673, in _choice_has_empty_value 
    value, _ = choice 
ValueError: too many values to unpack (expected 2) 
[22/Apr/2017 16:47:04] ERROR [django.server:124] "GET /admin/factories_pos/factorypos/add/ HTTP/1.1" 500 445135 

我在哪里想念什么?

回答

1

从文档,选择应该是

An iterable (e.g., a list or tuple) consisting itself of iterables of exactly two items (e.g. [(A, B), (A, B) ...]) to use as choices for this field. If this is given, the default form widget will be a select box with these choices instead of the standard text field

+0

我改变我的功能按照你的答案。我会马上回来。 – Sarit

+0

我被误导了'List [str]'。它的作品,然后我误解了它。实际上,每次在'model'中都使用tuple,其参数为'choices'。但这次是“表格”。非常感谢你。 – Sarit