如何在UpdateView中为Charfield使用选择小部件

时间:2014-11-17 13:42:51

标签: django django-forms django-views

我想在charField中将select渲染为UpdateView小部件。我想用ajax进行操作。

形式:

class UpdateItemForm(forms.ModelForm):
    """
    """

    TYPE_CHOICES = (('SELECT', 'SELECT'),
                    ('GOLD', 'GOLD'),
                    ('SILVER', 'SILVER'))
    type = forms.ChoiceField(required=True, choices=TYPE_CHOICES,
                             widget=forms.Select(attrs={'required': 'required',
                                                        'onchange': 'get_names_list(this)',
                                                        }
                                                 )
                             )
    purity_percent = forms.DecimalField(decimal_places=2, min_value=Decimal(0.1), max_value=Decimal(99.99),
                                        widget=forms.TextInput(attrs={'required': 'required',
                                                                      'maxlength': '5',
                                                                      'size': '10',
                                                                      'class': 'per',
                                                                      'onkeypress': 'return is_number_key_purity(event)',
                                                                      'onkeyup': 'return is_number_key_purity(event)',
                                                                      'onblur': 'calculate_value()'
                                                                      }
                                                               ),
                                        )

    class Meta:

        model = Item
        exclude = ('created_by', 'updated_by',
                   'created_on'
                   )
        widgets = {'weight': forms.TextInput(attrs={'required': 'required',
                                                    'maxlength': '6',
                                                    'size': '12',
                                                    'onkeypress': 'return is_number_key(event)',
                                                    'onkeyup': 'return is_number_key(event)',
                                                    'onblur': 'calculate_value()'
                                                    }),
                   'remark': forms.Textarea(attrs={'placeholder': 'OK',
                                                   }
                                            ),
                   'deduction': forms.TextInput(attrs={'required': 'true',
                                                       'maxlength': '6',
                                                       'size': '10',
                                                       'class': 'per',
                                                       'onkeypress': 'return is_number_key(event)',
                                                       'onkeyup': 'return is_number_Key(event)',
                                                       'onblur': 'calculate_value()'
                                                       }),
                   'fine_weight': forms.HiddenInput(attrs={'required': 'true',
                                                           'maxlength': '6',
                                                           'size': '10',
                                                           'value': ''
                                                           }
                                                    ),
                   'packet': forms.HiddenInput(attrs={'required': 'true'}),
                   'id': forms.HiddenInput(attrs={'required': 'true'}),
                   'name': forms.Select(attrs={'required': 'required',
                                               }
                                        )
                   }

当我的表单呈现时,名称字段显示为空。

<select id="id_item_set-0-name" maxlength="50" name="item_set-0-name" required="required"> </select>

如果我使用forms.TextInput widget项目名称显示但我想使用Select widget

1 个答案:

答案 0 :(得分:0)

根据the documentation,选择小部件可能需要将您的选择传递给它。

如果您需要获取每个页面请求的选项,您可以在表单构造函数中调整窗口小部件,如下所示:

class UpdateItemForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UpdateItemForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget.choices = Name.objects.all()

如果没有意义,您是否可以使用模型代码更新您的问题,并阐明您需要在窗口小部件中显示哪些选项?