向呈现的html添加了禁用属性,现在表单无效

麦可

的Django 1.9.7

class PlaceName(models.Model):
    one = ForeignKey(Place, on_delete=models.CASCADE)
    ...

class PlaceNameCreate(CreateView):
    model = PlaceName
    fields = ['one', 'name', 'since', ]    

@register.filter
def disable_one(value):
    """
    Disable selection of "one" field in case of one-to-many relations.
    """
    value = value.replace('name="one"', 'name="one" disabled')
    value = mark_safe(value)
    return value

<form method="post" action="">
    {% csrf_token %} 
    <table>
    {{ form.as_table|disable_one }}
    </table>
    <input type="submit" value="Сохранить"/>
</form>

该PlaceName是下级参考书,主要是Place。我从PlaceView(DetailView)调用PlaceNameCreate,传输一个带符号的Place值,并且不希望用户更改它。

好吧,这是行不通的。在此ForeignKey的页面上,显示消息“此字段为必填”。

如果我从模板中删除disable_one过滤器,则一切正常:成功保存模型实例。

如果我挖到FormMixin并在方法get_form中可以看到

dict: {'instance': None, 'data': <QueryDict: {'since': ['2'], 'csrfmiddlewaretoken': ['6NPIva2Z7XEZzuG2xgWB3sAz0N1SPqZc'], 'name': ['2']}>, 'files': <MultiValueDict: {}>, 'prefix': None, 'initial': {}}

这意味着一个字段为空。表格无效也就不足为奇了。

没有过滤器:

dict: {'instance': None, 'data': <QueryDict: {'one': ['3'], 'since': ['3'], 'csrfmiddlewaretoken': ['6NPIva2Z7XEZzuG2xgWB3sAz0N1SPqZc'], 'name': ['2']}>, 'files': <MultiValueDict: {}>, 'prefix': None, 'initial': {}}

我检查了呈现的html。唯一的区别-如预期的-是属性“禁用”。

任何变体都是可以接受的,我使用过滤器的方式不是教条。我只是认为这是最简单的一种。

您能否提示我如何实现当前的目标:向用户显示值保留,而其他变体的选择是不可能的。

稍后添加:

我按照建议尝试了只读。不工作 这是呈现的html。

<!DOCTYPE html>
...
<select id="id_one" name="one" readonly>
<option value="">---------</option>
<option value="3" selected="selected">664011</option>
</select>

嗯,在浏览器中,用户仍然可以在两个值(“ ---------”和“ 664011”)之间进行选择。

再次添加

该问题被认为是重复的。但这不是。这是一个纯Django问题。为我建议的解决方案是这样的:disable元素,但将值保留在隐藏的输入中。然后使用JQuery。这不是我想要的。

可能的解决方案

我只是决定剥夺用户的任何其他选择。如果没有更好的解决方案,这是可以接受的。

def get_form(self, form_class):
    form = super(PlaceNameCreate, self).get_form(form_class)
    one = self.initial.get('one')
    choices = ((one.id, one),)
    form.fields['one'].widget = forms.Select(choices=choices)
    return form
麦可
def get_form(self, form_class):
    """
    For one-to-many relationships.
    Deprive user of any choice. 
    """
    form = super(CreateSubordinate, self).get_form(form_class)
    one = self.initial.get('one')
    if one:
        choices = ((one.id, one),)
        form.fields['one'].widget = forms.Select(choices=choices)
    return form

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向呈现的html添加了禁用属性,现在表单无效

来自分类Dev

向 CF Wheels 表单添加自定义 HTML 属性

来自分类Dev

呈现的HTML的哪个HTTP状态响应无效的表单输入

来自分类Dev

HTML表单重置不会还原禁用的属性

来自分类Dev

HTML表单重置不会还原禁用的属性

来自分类Dev

Visual Studio Designer向表单添加了边距和填充

来自分类Dev

__metaclass__向创建的类添加无效属性?

来自分类Dev

__metaclass__向创建的类添加无效属性?

来自分类Dev

如何通过prop向按钮中的按钮添加禁用属性?

来自分类Dev

通过 AJAX 向 Bootstrap 按钮添加“禁用”属性

来自分类Dev

使用jQuery向HTML添加Maxlength属性

来自分类Dev

向所有html标签添加属性

来自分类Dev

Woocommerce 2.6.2添加了禁用属性来更新购物车按钮

来自分类Dev

添加了用户单击后退按钮时的警报,但是现在我想在提交表单时将其删除

来自分类Dev

使用PHP向表单元素添加属性

来自分类Dev

向FuelPHP模型属性添加动态表单字段选项

来自分类Dev

尝试向 Django 表单上的输入元素添加类属性。

来自分类Dev

如何向表单添加表单?

来自分类Dev

如何向表单添加表单?

来自分类Dev

隐藏时的 Bootstrap 模式向 html 正文添加了填充权

来自分类Dev

向此html表单添加搜索ajax功能

来自分类Dev

将数据属性添加到由 django 表单库呈现的 <options>

来自分类Dev

Django表单未以HTML呈现

来自分类Dev

向关联添加属性

来自分类Dev

向接口添加属性

来自分类Dev

向会话添加属性

来自分类Dev

向枚举添加属性

来自分类Dev

向列表添加属性

来自分类Dev

向函数添加属性