Python 3.x 如何使用django表单显示带有预选数据的选择字段?
我有一个django表单,有两个选项(是和否),在我的“创建页面”上,我可以呈现Python 3.x 如何使用django表单显示带有预选数据的选择字段?,python-3.x,django,Python 3.x,Django,我有一个django表单,有两个选项(是和否),在我的“创建页面”上,我可以呈现select字段来保存数据,它工作正常。当我尝试在“编辑页面”上使用该值时,该值不是与当前值一起预先选择的,如何在select输入字段上选择当前值 表格: class MyForm(forms.ModelForm): choose = forms.BooleanField( required=False, widget=forms.Select( ch
select
字段来保存数据,它工作正常。当我尝试在“编辑页面”上使用该值时,该值不是与当前值一起预先选择的,如何在select
输入字段上选择当前值
表格:
class MyForm(forms.ModelForm):
choose = forms.BooleanField(
required=False,
widget=forms.Select(
choices=[(1, 'Yes'), (0, 'No')],
attrs={'class': 'form-control'}
)
)
class Meta:
model = MyModel
调用视图进行编辑时:
class MyUpdateView(
LoginRequiredMixin,
SuccessMessageMixin,
UpdateView,
):
model = MyModel
form_class = MyForm
template_name = "my/template.html"
success_url = reverse_lazy('my-url')
success_message = 'Updated!'
def get_object(self, queryset=None):
data = super(MyUpdateView, self).get_object()
if not data.user == self.request.user:
raise Http404
# data.choose is False
return data
HTML
输入将始终为“1”(是),即使当前值为“0”(否)
HTML:
{{ form.choose }}
模型:
class MyModel(models.Model):
choose = models.BooleanField(
default=False,
verbose_name='Cumulativo'
)
将此添加到您的
MyUpdateView
:
initial = { 'choose': 1 }
您正在表单中定义自定义字段“choose”,它没有引用MyModel字段“choose”。这就是为什么您总是将第一个值“Y”作为默认值或在下拉列表中获取第一个值“Y” 如果要引用模型对象,只需在表单中使用self关键字即可
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['choose'].widget.attrs['class'] = 'form-control'
class Meta:
model = MyModel
fields = ('__all__')
问题不在于初始值,而是表单需要使用来自模型的值:)如果模型包含“1”,则所选值应为“是”,否则为“否”,我知道,您可以发布您的模型吗?是的,没有问题。这不提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。-您没有包括
BenefitForm
,但它用于编辑外观。这对初始数据或字段值有影响吗?当实例加载到表单中时,您确认了实例上的值吗?很抱歉,这是一个输入错误,我已经在表单类上使用了MyModel
,在我的UpdateView类上使用了MyForm
。是的,您在表单类中使用MyModel的事实是正确的。但您正在表单类中创建新字段“choose”,它不引用模型类。因此,模板中显示的字段是自定义字段“选择”。这不是表单中的模型字段。