Django 条件必填字段和禁用的输入
我的表格有一大堆地址字段(街道、城市、国家、省、邮政编码),需要反复填写。为了方便用户,我添加了一个“复制自”选择器,用户可以在其中选择以前使用过的地址。执行此操作时,表单字段将自动填写,然后禁用。这样他们就可以清楚地看到他们将要提交的内容 问题是,如果字段被禁用,则不会提交输入。这很好,因为我可以从选择器中获取所需的所有数据,但现在表单验证失败 我想我有两个选择:Django 条件必填字段和禁用的输入,django,django-forms,design-decisions,Django,Django Forms,Design Decisions,我的表格有一大堆地址字段(街道、城市、国家、省、邮政编码),需要反复填写。为了方便用户,我添加了一个“复制自”选择器,用户可以在其中选择以前使用过的地址。执行此操作时,表单字段将自动填写,然后禁用。这样他们就可以清楚地看到他们将要提交的内容 问题是,如果字段被禁用,则不会提交输入。这很好,因为我可以从选择器中获取所需的所有数据,但现在表单验证失败 我想我有两个选择: 在提交表单之前重新启用表单字段(但这有点像黑客) 使所有地址字段都是可选的。但是我需要添加一组clean方法,以确保在不使用预设选
clean
方法,以确保在不使用预设选择器的情况下填充它们。此外,我在网站上到处使用地址表单,在某些地方它们确实是必需的,所以我不想让字段成为可选字段。尽管如此,我想我可以复制粘贴地址表,为这个页面做一个特殊的案例想法?我应该采取什么方法?一些想法。他们可能会给你一些想法
一些想法。他们可能会给你一些想法
我一直面临一个类似的问题,字段是必需的,但它们的值是从另一个表单获取的。我决定做以下几点:
JS文件
window.addEventListener('load', configureNoManualInputFields);
function configureNoManualInputFields()
{
var elements = document.getElementsByClassName('RequiredNoManual');
for(var i =0; i<elements.length; i++)
{
elements[i].oncut = function(){event.preventDefault();};
elements[i].oncopy = function(){event.preventDefault();};
elements[i].onkeydown = function(){event.preventDefault();};
elements[i].onkeypress = function(){event.preventDefault();};
elements[i].setAttribute('required', 'required');
}
}
window.addEventListener('load',configureNoManualInputFields);
函数配置NoManualInputFields()
{
var elements=document.getElementsByClassName('RequiredNoManual');
对于(var i=0;i我一直面临类似的问题,其中字段是必需的,但其值是从另一种形式获取的。我决定执行以下操作:
为所有需要但不需要手动输入的输入分配一个类
创建一个自动禁用键盘或上下文菜单中所有用户输入的函数
以下是我的解决方案:
带有表单的HTML文件
JS文件
window.addEventListener('load', configureNoManualInputFields);
function configureNoManualInputFields()
{
var elements = document.getElementsByClassName('RequiredNoManual');
for(var i =0; i<elements.length; i++)
{
elements[i].oncut = function(){event.preventDefault();};
elements[i].oncopy = function(){event.preventDefault();};
elements[i].onkeydown = function(){event.preventDefault();};
elements[i].onkeypress = function(){event.preventDefault();};
elements[i].setAttribute('required', 'required');
}
}
window.addEventListener('load',configureNoManualInputFields);
函数配置NoManualInputFields()
{
var elements=document.getElementsByClassName('RequiredNoManual');
对于(var i=0;i(1)是的。地址表单已经存在。他们可以跳过预设,然后开始填写;强迫他们查看预设来决定是否要使用它,然后让它出现是没有意义的……加上一行地址并不像表单那样清楚地分隔出各个部分;禁用元素是没有意义的更易于阅读。(2)否。地址保存在一个单独的表中;我希望禁用字段,以便知道是否可以重复使用同一FK或是否必须创建新的地址对象。如果他们希望使用预设,然后编辑它,他们可以单击------预设,然后翻转到“-选择-”选项重新启用输入,但保留值,然后将其编辑为其内容。(1)是的。地址表单已经存在。他们可以跳过预设,然后开始填写;强迫他们查看预设来决定是否要使用它,然后让它出现是没有意义的……加上一行地址并不像表单那样清楚地分隔出各个部分;禁用元素是没有意义的更易于阅读。(2)否。地址保存在一个单独的表中;我希望禁用字段,以便知道是否可以重复使用同一FK或是否必须创建新的地址对象。如果他们希望使用预设,然后编辑它,他们可以单击------预设,然后翻转到“-选择-”选项重新启用输入,但保留值,然后将其编辑为其核心内容。readonly+样式可能在此处工作良好。readonly+样式可能在此处工作良好。