我想在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
。
答案 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()
如果没有意义,您是否可以使用模型代码更新您的问题,并阐明您需要在窗口小部件中显示哪些选项?