如何在Django ModelForm中添加额外的字段?

时间:2018-07-24 00:08:50

标签: python django django-forms django-admin

所以我正在管理页面。我正在用[String]注册表单。而且我想在表单中添加一个额外的字段,这将使我可以在admin.site.register中填充文件内容。

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

TextField

,但未显示该字段。有任何想法吗? 另外,在保存模型之前,我也不知道在何处访问文件内容并用class PersonForm(forms.ModelForm): extra_field = forms.FileInput() class Meta: model = Person fields = '__all__' 填充文件。

谢谢。

4 个答案:

答案 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