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
,看看它是否会崩溃。我已经注册了表单和模型。此外,我没有改变模型,只是模型形式。我需要应用迁移吗?