【问题标题】:django make ModelChoiceField non-editabledjango 使 ModelChoiceField 不可编辑
【发布时间】:2015-02-02 17:48:33
【问题描述】:

我有一个带有 ModelChoiceField 的 ModelForm,我需要确保初始值应该保持不变,并且我们不能选择任何其他值。这意味着,使该字段不可编辑、保留或类似。我认为,将其设置为 CharField 或仅使用 Field 将无济于事,因为稍后我需要该字段中的对象进行验证和处理。 有人可以帮忙吗?

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

【问题讨论】:

  • 请显示您的 ModelForm 的代码并描述您看到的行为以及您期望看到的内容。
  • 显示一些代码...但是根据您的信息,我唯一可以假设的是您必须在模板上而不是在您的 models.py 上进行这种设置,您可以看到这已经在这里回答..看看它是否适合你stackoverflow.com/questions/2933478/…
  • 如果您只打算使用默认值,为什么还要显示该字段?您无需 POST 即可在 Python 代码中使用该值,您只需从模型中访问它即可。
  • 不完全确定你想要实现什么,但你可以在你的模型中使用 fields.editable 属性。 `myField = models.CharField(editable=False)` 或者在modelForm中只排除像`class Meta: model = myModel exclude = ('myField')`这样的字段
  • 嗯,关键是在某些情况下,根据用户的数据,我们需要禁止他/她在该字段中选择值,在某些情况下我们必须允许这样做。谢谢大家,问题解决了。该解决方案基于来自@eddwinpaz 评论的信息。

标签: python django django-forms


【解决方案1】:

原来,我这里需要以下代码:

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

【讨论】:

    【解决方案2】:

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

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

    使用此选项,您将禁用要编辑的 de 字段,并且您可以转换要保存到数据库中的 init 实例。

    algorithm = forms.ModelChoiceField(label='Algoritmo',queryset=Algorithm.objects.all(),to_field_name="name",widget=forms.TextInput(attrs={'readonly':'readonly'}))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2018-07-26
      • 2016-07-07
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多