I have done a ModelForm adding some extra fields that are not in the model. I use these fields for some calcualtions when saving the form.
The extra fields appear on the form and they are sent in the POST request when uploading the form. The problem is they are not added to the
cleaned_data dictionary when I validate the form. How can I access them?
It's possible to extend Django
ModelForm with extra fields. Imagine you have a custom User model and this
class ProfileForm(forms.ModelForm): class Meta: model = User fields = ['username', 'country', 'website', 'biography']
Now, imagine you want to include an extra field (not present in your User model, lets say an image avatar). Extend your form by doing this:
from django import forms class AvatarProfileForm(ProfileForm): profile_avatar = forms.ImageField() class Meta(ProfileForm.Meta): fields = ProfileForm.Meta.fields + ('profile_avatar',)
Finally (given that the form has an
ImageField), remember to include
request.FILES when instantiating the form in your view:
# (view.py) def edit_profile(request): ... form = AvatarProfileForm( request.POST or None, request.FILES or None, instance=request.user ) ...
Hope it helps. Good luck!
I was getting a "can only concatenate tuple (not "list") to tuple" error in AvatarProfileForm.Meta.fields attribute. Changed it to a tuple and it worked.