html属性值为什么无效,向呈现的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

{% csrf_token %}

{{ form.as_table|disable_one }}

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

嗯,这不起作用。在ForeignKey的页面上有一条消息“此字段是必需的”。

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

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

dict: {'instance': None, 'data': , 'files': , 'prefix': None, 'initial': {}}

这意味着一个字段为空。表格无效并不奇怪。

没有过滤器:

dict: {'instance': None, 'data': , 'files': , 'prefix': None, 'initial': {}}

我检查了渲染的html。唯一的区别 - 正如预期的那样 - 属性“禁用”。

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

你能给我一个提示如何实现我目前的目标:向用户展示价值,而不可能选择其他变种。

稍后添加:

我按照建议尝试了readonly。不工作。这是渲染的html。

...

---------

664011

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

再次添加

此问题被视为重复。但事实并非如此。这是纯粹的

Django的问题。建议我作为解决方案是这样的:禁用元素,但将值保留在隐藏的输入中。然后使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值