【发布时间】:2021-09-05 05:15:19
【问题描述】:
我正在尝试访问基于类的视图中的“字段”属性
这是我的 forms.py 的示例:
from django import forms
from .models import ErrorEvent
class ErrorEventForm(forms.ModelForm):
class Meta:
model = HumanErrorEvent
# fields =
exclude = ['event_id', 'user_modified', 'date_modified']
widgets = {
'owner': forms.TextInput(),
}
那么这是我的看法:
class ErrorCreateView(CreateView):
template_name = "forms/form.html"
form_class = ErrorEventForm
model = ErrorEvent
def get_context_data(self, **kwargs):
if not self.request.user.groups.filter(name='leaders').exists():
self.form_class.fields['owner'].widget = forms.HiddenInput()
context = super(ErrorCreateView, self).get_context_data(**kwargs)
return context
我得到的错误是:
AttributeError: type object 'ErrorEventForm' has no attribute 'fields'
由于这一行:
self.form_class.fields['owner'].widget = forms.HiddenInput()
是否无法访问视图中的“字段”属性?如果没有,有没有办法根据用户所在的组隐藏“所有者”表单字段?
提前感谢您的所有帮助!
【问题讨论】:
-
为什么在提交表单时隐藏用户,而不是简单地使用
request.user? -
这是通常的做法,但我希望能够让某些人有权更改所有者或以其他人的名义创建所有者。
-
然后您可以在表单中添加
ModelChoiceField。 -
这如何解决我的问题?
-
@mike_gundy123 表单的
fields属性仅在实例化时添加到表单中。表单类本身没有它。get_context_data也不是最好的覆盖方法。
标签: django forms django-views django-forms