如何在表单的显示中包含不可编辑的信息? [复制]
Posted
技术标签:
【中文标题】如何在表单的显示中包含不可编辑的信息? [复制]【英文标题】:How to include uneditable information on a form's display? [duplicate] 【发布时间】:2013-10-14 15:49:19 【问题描述】:我正在使用一个 django 表单集,其中包含指定用户友谊偏好的表单。
我的表单字段是:
siteuser_id = forms.IntegerField(widget=forms.HiddenInput())
subscribed = forms.BooleanField(required=False)
ally = forms.BooleanField(required=False)
enemy = forms.BooleanField(required=False)
目标是显示一个人的所有朋友以及该人在游戏中的状态。
当我在表单集中显示表单时,我想在该人的友谊偏好旁边显示该人的昵称(昵称不是唯一的,或者我只会使用它而不是 siteuser_id)。
我尝试将用户名设置为表单字段,但这使其可编辑,我只是希望它显示在表格中,而不是可编辑的。
帮助?
【问题讨论】:
嗨,Marcin,我不想要表单域。我只想显示信息。 【参考方案1】:听起来您不一定需要表单 - 您可以将对象中的数据传递给您的模板。
但是,如果您确实想对表单执行此操作,您可以为表单字段设置自定义widget
,并为Widget
设置子类。见https://docs.djangoproject.com/en/dev/ref/forms/widgets/。
【讨论】:
我认为这会奏效。我从来没有做过。我试试看。 我只是将信息放在模板中,但它会随着表单集中的每个表单而变化,而且我无法知道我在哪个表单上。 @FooParty 不,您不会“将信息放入模板中”。您将信息传递给模板,模板将呈现它。 好的,我制作了一个自定义小部件,它可以工作了! @FooParty 太好了!随意接受并投票赞成这个答案。【参考方案2】:只需将readonly
属性添加到该字段:
username = forms.CharField(widget=forms.TextInput(attrs="readonly": "readonly"))
使该字段不可编辑。
【讨论】:
嗯。不过,这仍然是一个文本框。我觉得有一个不可编辑的文本框有点丑。【参考方案3】:如果您使用model formsets(或使用它们是一个选项),您可以访问模板中表单的instance
属性。
例如:
% for form in formset %
form.instance.nickname
form
% endfor %
【讨论】:
【参考方案4】:这是我为此制作的自定义小部件!
只需将其放在项目中的 widgets.py 文件中即可:
from django.forms.widgets import Widget
class DisplayOnlyField(Widget):
def __init__(self,attrs=None):
self.attrs = attrs or
self.required = False
def render(self, name, value="", attrs=None):
try:
val = value
except AttributeError:
val = ""
return val
然后在你的views.py中,放:
from projname.widgets import DisplayOnlyField
在球场上,它会是:
user_name = forms.CharField(widget=DisplayOnlyField())
【讨论】:
以上是关于如何在表单的显示中包含不可编辑的信息? [复制]的主要内容,如果未能解决你的问题,请参考以下文章