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

时间:2013-10-07 22:01:07

标签: django django-forms

我正在使用包含指定用户友情偏好的表单的django formset。

我的表单字段是:

    siteuser_id = forms.IntegerField(widget=forms.HiddenInput())
    subscribed = forms.BooleanField(required=False)
    ally = forms.BooleanField(required=False)
    enemy = forms.BooleanField(required=False)

目标是显示一个人的所有朋友以及该人在游戏中的状态。

当我在formset中显示表单时,我想显示该人的昵称(昵称不是唯一的,或者我只是使用它而不是siteuser_id)以及该人的友情偏好。

我尝试将用户名设为表单字段,但这使其可编辑,我只是​​希望它显示在表格中,而不是可编辑的。

帮助?

4 个答案:

答案 0 :(得分:1)

只需将readonly属性添加到字段中:

username = forms.CharField(widget=forms.TextInput(attrs={"readonly": "readonly"}))

使该字段不可编辑。

答案 1 :(得分:1)

听起来你不一定想要一个表单 - 你可以将对象中的数据传递给你的模板。

但是,如果您确实希望使用表单执行此操作,则可以为表单字段和子类widget设置自定义Widget。请参阅https://docs.djangoproject.com/en/dev/ref/forms/widgets/

答案 2 :(得分:1)

这是我为此做的自定义小部件!

将它放在项目的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())

答案 3 :(得分:0)

如果您使用model formsets(或使用它们是一个选项),您可以访问模板中表单的instance属性。

例如:

{% for form in formset %}
    {{ form.instance.nickname }}
    {{ form }}
{% endfor %}