所以我正在管理页面。我正在用[String]
注册表单。而且我想在表单中添加一个额外的字段,这将使我可以在admin.site.register
中填充文件内容。
因此,我需要添加一个额外的TextField
来上传文件并用其内容填充FileInput
。我正在尝试:
TextField
,但未显示该字段。有任何想法吗?
另外,在保存模型之前,我也不知道在何处访问文件内容并用class PersonForm(forms.ModelForm):
extra_field = forms.FileInput()
class Meta:
model = Person
fields = '__all__'
填充文件。
谢谢。
答案 0 :(得分:3)
我的问题在这一行:
extra_field = forms.FileInput()
我解决了将行更改为以下问题:
extra_field = forms.FileField()
感谢所有愿意提供帮助的人。
答案 1 :(得分:1)
尝试在构造函数中做到这一点。
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管理员,因此您也需要更改格式in the admin。
答案 2 :(得分:1)
根据文档,您所做的事情还可以,请在此处阅读说明-https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/#overriding-the-default-fields
要在管理员中注册,应在admin.py
中添加以下内容:
from django.contrib import admin
from .forms import PersonForm
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
form = PersonForm
此处的示例-https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#admin-custom-validation
编辑:有必要实际注册自定义ModelAdmin,有两种等效的方法:如上例所示,使用装饰器,或使用admin.site.register(Person, PersonAdmin)
。
用于ModelAdmin注册的文档-https://docs.djangoproject.com/en/2.0/ref/contrib/admin/#the-register-decorator
注册源代码-https://github.com/django/django/blob/master/django/contrib/admin/sites.py#L85
答案 3 :(得分:0)
在admin中将模型注册为
admin.site.register(UserProfile)
其中UserProfile是OnetoOne模型,它扩展了django的内置用户模型,然后在模型中的每次更改运行后
python manage.py makemigrations
python manage.py migrate