EDIT 2020(Django 2 或更高版本)
在 Django 2+ 中,您可以像这样添加额外的字段:
class ProfileForm(forms.ModelForm):
extra_field = forms.ImageField()
class Meta:
model = User
fields = ['username', 'country', 'website', 'biography']
原始答案(Django 1)
可以使用额外的字段扩展 Django ModelForm。想象一下,你有一个自定义的 User 模型和这个 ModelForm:
class ProfileForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'country', 'website', 'biography']
现在,假设您想要包含一个额外的字段(在您的用户模型中不存在,比如说图像头像)。通过这样做来扩展您的表单:
from django import forms
class AvatarProfileForm(ProfileForm):
profile_avatar = forms.ImageField()
class Meta(ProfileForm.Meta):
fields = ProfileForm.Meta.fields + ('profile_avatar',)
最后(假设表单有一个ImageField),在视图中实例化表单时记得包含request.FILES:
# (view.py)
def edit_profile(request):
...
form = AvatarProfileForm(
request.POST or None,
request.FILES or None,
instance=request.user
)
...
希望对您有所帮助。祝你好运!
编辑:
我在 AvatarProfileForm.Meta.fields 属性中收到“只能将元组(而不是“列表”)连接到元组的错误。将其更改为元组,并且可以正常工作。