如何在 django 模型表单中添加自定义字段?
Posted
技术标签:
【中文标题】如何在 django 模型表单中添加自定义字段?【英文标题】:How to add a custom field in django model form? 【发布时间】:2019-01-28 21:44:57 【问题描述】:我正在尝试在表单中添加只读字段。
模型Folder
已在管理站点注册。 FolderAdminForm
定义自定义字段 statistics
。 Folder
模型中没有 statistcs
字段,我只想在表单上放置一些只读数据。此数据在模板中定义。
但每当用户没有编辑权限时,我都会收到错误消息。如果用户只有查看权限,则会出现此错误:
AttributeError: Unable to lookup 'statistics' on Folder or FolderAdmin
这是我的代码:
class CustomWidget(forms.Textarea):
template_name = 'widget.html'
class FolderAdminForm(forms.ModelForm):
class Meta:
model = Folder
fields = ('field1', 'field2', 'field3',)
statistics = forms.Field(
widget=CustomWidget,
label='Estatísticas',
help_text='Estatísticas da pasta',
)
【问题讨论】:
请发布您的FolderAdmin
课程。
【参考方案1】:
根据this answer的最后一部分,您可以尝试覆盖表单__init__()
方法并分配字段initial
属性。
这可能看起来像:
def __init__(self, *args, **kwargs):
# only change attributes if an instance is passed
instance = kwargs.get('instance')
if instance:
self.base_fields['statistics'].initial = 'something'
super().__init__(*args, **kwargs)
这对你有用吗?
【讨论】:
【参考方案2】:该错误仅在我尝试打开没有编辑权限(即只读权限)的文件夹实例时发生。因此,django 将统计字段视为只读字段,然后为该字段搜索标签。 Django 在 Model、ModelAdmin 中寻找这个标签。由于它们都没有“统计”属性,因此会引发错误。 所以,这对我有用:
class FolderAdminForm(forms.ModelForm):
class Meta:
model = Folder
fields = ('field1', 'field2', 'field3',)
labels = 'statistics': 'Estatísticas'
statistics = forms.Field(
widget=CustomWidget,
label='Estatísticas',
help_text='Estatísticas da pasta',
)
因此,每当 django 查找统计标签时,它都会找到该标签并且不会引发错误。我不知道为什么它不能识别作为 Field 参数传递的标签。
【讨论】:
以上是关于如何在 django 模型表单中添加自定义字段?的主要内容,如果未能解决你的问题,请参考以下文章
Django allauth 自定义登录表单未呈现自定义用户模型中的所有字段