首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模型字段如何禁用和防止篡改?

Django模型字段如何禁用和防止篡改?
EN

Stack Overflow用户
提问于 2018-05-12 00:15:38
回答 3查看 7.9K关注 0票数 3

有这个disabled属性。但是我不能将它应用于模型表单字段。我不知道该怎么做。我可以很容易地将它添加到forms.Form中。但由于我使用的是窗口小部件,所以我不知道在哪里插入它。

https://docs.djangoproject.com/en/2.0/ref/forms/fields/#disabled

代码语言:javascript
复制
class TestForm(forms.ModelForm):
    class Meta:
        model = Test
        fields = ['date']
        widgets = {'date': forms.TextInput(attrs={'readonly': 'readonly'})}
EN

回答 3

Stack Overflow用户

发布于 2019-03-06 20:26:37

当我想在创建时禁用某些字段时,我遇到了这样的情况。以及编辑时禁用的某些字段。

我的环境: 3,Django 2.1

My Form:

代码语言:javascript
复制
class AddInvoiceForm(forms.ModelForm):
    disabled_fields = ['inv_type', 'report', 'subsidiary']
    class Meta:
        model = models.Invoice
        fields = ('inv_type', 'report', 'subsidiary', 'rate_card', 'reviewed')

    def __init__(self, *args, **kwargs):
        super(AddInvoiceForm, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:
            for field in self.disabled_fields:
                self.fields[field].disabled = True
        else:
            self.fields['reviewed'].disabled = True
票数 6
EN

Stack Overflow用户

发布于 2018-05-12 08:02:45

假设您的date字段为forms.DateField,并且您想要使用TextInput小部件,请尝试执行以下操作:

代码语言:javascript
复制
class TestForm(forms.ModelForm):
    date = forms.DateField(widget=forms.TextInput, disabled=True)
    class Meta:
        model = Test
        fields = ['date']

这将覆盖从您的Test模型定义创建的默认字段定义。

禁用的布尔参数当设置为True时,将使用禁用的HTML属性禁用表单域,以便用户无法对其进行编辑。即使用户篡改了提交给服务器的字段的值,它也会被忽略,取而代之的是表单初始数据中的值。

从上面的SO帖子中提取的关键注意事项是:

readonly元素是不可编辑的,但会在相应的form提交时发送。disabled元素是不可编辑的,并且不会在提交时发送。

从上面的引用来看,设置disabled=True就足够了,所以你不需要在你的小部件上设置readonly属性。

票数 3
EN

Stack Overflow用户

发布于 2018-05-12 00:22:26

代码语言:javascript
复制
class TestForm(forms.ModelForm):
date = forms.CharField(disabled=True)
class Meta:
    model = Test
    fields = ['date']

    widgets = {
        'date': forms.TextInput(attrs={'readonly': 'readonly'}),
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50296374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档