我做了一个ModelForm,在模型中添加了一些不是的额外字段。在保存表单时,我使用这些字段进行一些计算。
额外的字段出现在表单上,并在上传表单时在POST请求中发送。问题是,当我验证表单时,它们没有添加到cleaned_data
字典中。我如何访问它们?
发布于 2014-04-29 08:13:53
编辑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
。假设你有一个自定义的用户模型和这个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属性中得到一个“只能连接元组(不能连接"list")到元组”错误。将其更改为元组,它起作用了。
发布于 2018-10-04 17:09:04
我有一个非常类似的问题,只是看起来我做了所有需要做的事情,但当Django启动时,我得到了这个错误:
django.core.exceptions.FieldError: Unknown field(s) (my_new_field) specified for MyModel
这是我犯的一个愚蠢的错误,我不小心使用了窗口小部件类声明了我的字段:
class MyForm(forms.ModelForm):
my_new_field = forms.HiddenInput()
而不是字段类:
class MyForm(forms.ModelForm):
my_new_field = forms.CharField(widget=forms.HiddenInput())
这里没有回答手头的问题(已经回答得很好了),但可能会对其他人有所帮助。
发布于 2018-12-17 21:46:38
首先在表单中添加字段
class CreateForm(forms.ModelForm):
extra_field = forms.CharField(label = 'extra_field', required = False)
现在,在清理数据时,您需要从self.data 而不是 self.cleaned_data检索额外的字段
正确的
self.data.get('extra_field')
错误的
self.cleaned_data.get('extra_field')
https://stackoverflow.com/questions/2229039
复制相似问题