为什么我的排除字段仍然出现在这个 Django 表单中?

2024-03-20

我在用着exclude在我的表单的 Meta 类中,从表单中排除我想以编程方式填写的字段,但它仍然显示在表单中。

以下是代码的一些摘录:

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


排除需要一个元组,所以你需要

# note the extra comma
exclude = ('created_by',)

django 迭代exclude,并且由于字符串是可迭代的(返回每个字符),因此不会引发错误

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的排除字段仍然出现在这个 Django 表单中? 的相关文章

随机推荐