如何在表单的显示中包含不可编辑的信息? [复制]

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())

【讨论】:

以上是关于如何在表单的显示中包含不可编辑的信息? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在引导程序中包含链接以进行表单验证

如何自定义表单 Web 部件以在搜索中包含多个列?

如何在表单中包含自定义组件?

如何使用 AFHTTPRequestOperation 在表单字段中包含 JSON

如何在字符串中包含href链接? [复制]

如何在 Javascript 生成的 HTML 表单中包含 Django 1.2 的 CSRF 令牌?