Python 如何向Django模型表单添加额外字段?

Python 如何向Django模型表单添加额外字段?,python,django,django-forms,django-admin,Python,Django,Django Forms,Django Admin,所以我正在做一个管理页面。我正在向管理员网站注册表单。注册。我想在表单中添加一个额外的字段,这将允许我用文件内容填充TextField 因此,我需要添加一个额外的FileInput来上载文件,并用其内容填充TextField。我正在尝试: class PersonForm(forms.ModelForm): extra_field = forms.FileInput() class Meta: model = Person fields = '

所以我正在做一个管理页面。我正在向
管理员网站注册表单。注册
。我想在表单中添加一个额外的字段,这将允许我用文件内容填充
TextField

因此,我需要添加一个额外的
FileInput
来上载文件,并用其内容填充
TextField
。我正在尝试:

class PersonForm(forms.ModelForm):

    extra_field = forms.FileInput()

    class Meta:
        model = Person
        fields = '__all__'
但这一领域并未显现出来。有什么想法吗? 此外,在保存模型之前,我也不知道在哪里访问文件内容,并用该文件填充
TextField


提前感谢。

尝试在构造函数中执行此操作

class PersonForm(forms.ModelForm):

    class Meta:
        model = Person
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(PersonForm, self ).__init__(*args, **kwargs)
        self.fields['extra_field'] = forms.FileInput()

由于您使用的是django管理员,您也需要更改表单。

根据文档,您所做的一切都可以,请阅读此处的注释-

要在admin中注册它,您应该在
admin.py中添加类似的内容:

from django.contrib import admin
from .forms import PersonForm

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
     form = PersonForm
下面的示例-

编辑:需要实际注册自定义模型管理员,有两种等效的方法:使用decorator,如上面的示例所示,或者使用
admin.site.register(Person,PersonAdmin)

ModelAdmin注册文档-

注册源代码-

在管理员中将模型注册为

admin.site.register(UserProfile)
其中UserProfile是一个OnetoOnemodel,它扩展了django的内置用户模型,然后在模型中的每次更改运行之后

python manage.py makemigrations
python manage.py migrate

我的问题是:

extra_field = forms.FileInput()
我解决了将线路更改为以下位置的问题:

extra_field = forms.FileField()

感谢所有愿意帮忙的人。

我是Django的新手。我应该在哪里添加它在管理?我尝试了
ModelAdmin
字段
属性,但出现了一个错误。点击我文章中的链接,文档解释了这一点,您需要覆盖默认的管理表单。您可以更改admin类的form属性或重写该方法。我在
PersonalAdmin
中已经有了这个
form=PersonForm
,它是
admin.ModelAdmin
的子类。我还分配了
ModelAdmin
的以下属性:搜索字段、列表显示、字段、,只读字段、操作、排序、列表过滤器。这些作业中的任何一个可能是造成这种情况的原因吗?嗯,我想
字段
和/或
只读字段
可能会对您的表单造成一些干扰。只是为了调试,请从管理员中删除任何额外的自定义项,以查看是否有问题没有引起。有时可能会有缓存,所以请确保使用ctrl+shift+R刷新页面。最后,确保您的代码实际正在执行,只需在构造函数中添加
assert False
,看看它是否会崩溃。我已经注册了表单和模型。此外,我没有改变模型,只是模型形式。我需要应用迁移吗?