Python 如何在django模型表单中添加自定义字段?

Python 如何在django模型表单中添加自定义字段?,python,django,django-forms,django-admin,Python,Django,Django Forms,Django Admin,我试图在表单中添加一个只读字段 模型文件夹已在管理员站点中注册。文件夹管理信息定义了自定义字段统计信息。文件夹模型中没有statistcs字段,我只想在表单上添加一些只读数据。此数据在模板中定义 但是每当用户没有编辑权限时,我就会收到一个错误。如果用户仅具有查看权限,则会引发此错误: AttributeError: Unable to lookup 'statistics' on Folder or FolderAdmin 这是我的密码: class CustomWidget(forms.Te

我试图在表单中添加一个只读字段

模型
文件夹
已在管理员站点中注册。
文件夹管理信息
定义了自定义字段
统计信息
文件夹
模型中没有
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',
    )

根据的最后一部分,您可以尝试重写forms
\uuuu init\uuuu()
方法,并分配字段
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)

这对您有用吗?

只有当我试图在没有编辑权限(即只读权限)的情况下打开文件夹实例时,才会发生此错误。因此,Django将统计字段视为只读字段,然后搜索该字段的标签。Django在ModelAdmin中查找此标签。由于它们都没有“statistics”属性,因此会引发错误。 所以,这对我来说很有效:

 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查找用于统计的标签时,它都会找到该标签,并且不会引发错误。我不知道为什么它不能识别作为字段参数传递的标签。

请发布您的
FolderAdmin
类。