Django如何使ModelChoiceField不可编辑

3

我有一个带有ModelChoiceField的ModelForm,我需要确保初始值保持不变,我们不能选择任何其他值。这意味着将此字段设置为不可编辑、保留或类似的状态。我认为将其更改为CharField或Field并不能解决问题,因为我之后需要从此字段获取对象进行验证和处理。 有人可以帮忙吗?

 self.fields['field_name'].widget.attrs['readonly'] = True

1
请展示您的ModelForm代码,并描述您看到的行为以及您期望看到的行为。 - dylrei
展示一些代码...但根据您提供的信息,我唯一能假设的是,您必须在模板上进行此类设置,而不是在models.py上进行。您可以在这里看到已经有人回答了这个问题...看看它是否适用于您:https://dev59.com/UE7Sa4cB1Zd3GeqP0hnq - Eddwin Paz
2
为什么要显示该字段,如果您只打算使用默认值?您不需要在POST中传递该值,就可以从模型中直接访问它并在Python代码中使用。 - Brandon Taylor
不太确定您想要实现什么,但是您可以在模型中使用fields.editable属性,例如:myField = models.CharField(editable=False)或者在modelForm中排除该字段,如下所示:class Meta: model = myModel exclude = ('myField') - cmidi
嗯,问题在于有些情况下,根据用户的数据,我们需要禁止他/她在此字段中选择值,在一些情况下我们必须允许这样做。 感谢大家,问题已经解决。解决方案基于@eddwinpaz评论提供的信息。 - Vladimir
2个回答

2
结果证明,我需要以下代码:
self.fields['field_name'].widget.attrs['disabled'] = 'disabled'

1

当您提交表单时,此选项将从表单字段中删除该实例。

self.fields['field_name'].widget.attrs['disabled'] = 'disabled'


使用此选项,您将禁用字段的编辑,并且可以将初始实例转换为保存到数据库中。
algorithm = forms.ModelChoiceField(label='Algoritmo',queryset=Algorithm.objects.all(),to_field_name="name",widget=forms.TextInput(attrs={'readonly':'readonly'}))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接