【发布时间】:2011-12-29 16:03:59
【问题描述】:
我在表单的 Meta 类中使用 exclude 从表单中排除我想以编程方式填写的字段,但它仍然显示在表单中。
以下是部分代码摘录:
# Model
class Info(models.Model):
completed_by = models.ForeignKey(User, related_name='+')
# Form
class InfoForm(forms.ModelForm):
class Meta:
model = Info
exclude = ('created_by',) #ETA: added comma to make this a tuple
widgets = {
'some_other_field': forms.HiddenInput(),
'some_other_field2': forms.DateInput(attrs={'readonly': True}),
}
# View
form = InfoForm(initial={'some_other_field': value},
prefix='info', instance=info)
return direct_to_template(request, 'myapp/info.html', locals())
# Template
<form class='uniForm' method='POST'>
{% csrf_token %}
<fieldset class='inlineLabels'>{{ form|as_uni_form }}</fieldset>
<input type='submit' name='action' value='Save' />
</form>
这看起来应该很简单,而且我知道我之前已经成功完成了。我已经删除/重新创建了我的数据库并清除了我的浏览器缓存,以确保这不是一个因素。我还尝试将其设为HiddenInput 字段,就像some_other_field(也是ForeignKey 字段)一样,但它仍然显示在表单上。
这里有什么我遗漏的吗? uni_form 是否以某种方式覆盖了设置?如果没有,关于我可能在调试中寻找什么以了解发生这种情况/原因的任何建议?
(使用 Django 版本 1.2.7)
【问题讨论】:
-
如果你只渲染
{{ form }}而不是使用uni_form,它还会出现吗? -
好主意...是的,当呈现为 {{ form }} 时,它仍然会出现。
-
hm.. 只是为了确保:您的模型有
completed_by,但您排除了created_by。仅在示例中,对吗? -
啊……是的,就是这样。 :|太明显了,我猜。感谢您的帮助!
标签: django django-forms