Django 条件必填字段和禁用的输入

Django 条件必填字段和禁用的输入,django,django-forms,design-decisions,Django,Django Forms,Design Decisions,我的表格有一大堆地址字段(街道、城市、国家、省、邮政编码),需要反复填写。为了方便用户,我添加了一个“复制自”选择器,用户可以在其中选择以前使用过的地址。执行此操作时,表单字段将自动填写,然后禁用。这样他们就可以清楚地看到他们将要提交的内容 问题是,如果字段被禁用,则不会提交输入。这很好,因为我可以从选择器中获取所需的所有数据,但现在表单验证失败 我想我有两个选择: 在提交表单之前重新启用表单字段(但这有点像黑客) 使所有地址字段都是可选的。但是我需要添加一组clean方法,以确保在不使用预设选

我的表格有一大堆地址字段(街道、城市、国家、省、邮政编码),需要反复填写。为了方便用户,我添加了一个“复制自”选择器,用户可以在其中选择以前使用过的地址。执行此操作时,表单字段将自动填写,然后禁用。这样他们就可以清楚地看到他们将要提交的内容

问题是,如果字段被禁用,则不会提交输入。这很好,因为我可以从选择器中获取所需的所有数据,但现在表单验证失败

我想我有两个选择:

  • 在提交表单之前重新启用表单字段(但这有点像黑客)
  • 使所有地址字段都是可选的。但是我需要添加一组
    clean
    方法,以确保在不使用预设选择器的情况下填充它们。此外,我在网站上到处使用地址表单,在某些地方它们确实是必需的,所以我不想让字段成为可选字段。尽管如此,我想我可以复制粘贴地址表,为这个页面做一个特殊的案例

  • 想法?我应该采取什么方法?

    一些想法。他们可能会给你一些想法

  • 如果用户使用的是他们以前使用过的地址,并且他们无法编辑表单(字段被禁用),那么他们是否需要地址表单?不能在没有表单的情况下显示上一个地址,并将对它的引用作为隐藏参数传递吗
  • 如果用户可以编辑之前选择的地址(我认为Amazon可以这样做),那么让表单字段保持可编辑状态难道没有意义吗
    一些想法。他们可能会给你一些想法

  • 如果用户使用的是他们以前使用过的地址,并且他们无法编辑表单(字段被禁用),那么他们是否需要地址表单?不能在没有表单的情况下显示上一个地址,并将对它的引用作为隐藏参数传递吗
  • 如果用户可以编辑之前选择的地址(我认为Amazon可以这样做),那么让表单字段保持可编辑状态难道没有意义吗
    我一直面临一个类似的问题,字段是必需的,但它们的值是从另一个表单获取的。我决定做以下几点:

  • 为所有需要但不需要手动输入的输入分配一个类
  • 创建一个自动禁用键盘或上下文菜单中所有用户输入的函数
  • 以下是我的解决方案: 带有表单的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我一直面临类似的问题,其中字段是必需的,但其值是从另一种形式获取的。我决定执行以下操作:

  • 为所有需要但不需要手动输入的输入分配一个类
  • 创建一个自动禁用键盘或上下文菜单中所有用户输入的函数
  • 以下是我的解决方案: 带有表单的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+样式可能在此处工作良好。