gpt4 book ai didi

python - 如何禁用 django 表单中的模型字段

转载 作者:太空狗 更新时间:2023-10-29 17:09:09 26 4
gpt4 key购买 nike

我有这样一个模型:

class MyModel(models.Model):
REGULAR = 1
PREMIUM = 2
STATUS_CHOICES = ((REGULAR, "regular"), (PREMIUM, "premium"))
name = models.CharField(max_length=30)
status = models.IntegerField(choices = STATUS_CHOICES, default = REGULAR)

class MyForm(forms.ModelForm):
class Meta:
model = models.MyModel

在一个 View 中,我初始化一个字段并尝试使其不可编辑:

myform = MyForm(initial = {'status': requested_status})
myform.fields['status'].editable = False

但用户仍然可以更改该字段。

实现我所追求的目标的真正方法是什么?

最佳答案

第 1 步:禁用前端小部件

使用 HTML readonly 属性:
http://www.w3schools.com/tags/att_input_readonly.asp

禁用属性:
http://www.w3.org/TR/html401/interact/forms.html#adef-disabled

您可以通过小部件的 attrs 属性注入(inject)任意 HTML 键值对:

myform.fields['status'].widget.attrs['readonly'] = True # text input
myform.fields['status'].widget.attrs['disabled'] = True # radio / checkbox

第 2 步:确保该字段在后端有效禁用

为您的字段覆盖您的 clean 方法,以便无论 POST 输入如何(有人可以伪造 POST、编辑原始 HTML 等),您都可以获得已经存在的字段值。

def clean_status(self):
# when field is cleaned, we always return the existing model field.
return self.instance.status

关于python - 如何禁用 django 表单中的模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4945802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com