Возможно расширение 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
)
...
Надеется, что это помогает. Удачи!
EDIT:
я получаю «может только конкатенировать кортеж (не„список“) в кортеж» ошибка в атрибуте AvatarProfileForm.Meta.fields. Изменил его на кортеж, и он сработал.
Их следует добавить к словарной записи cleaned_data. Пожалуйста, напишите свой код формы, чтобы мы могли посмотреть. – gruszczy
Я советую вам не хранить информацию в поле «Форма». Более чистое решение: хранить его в сеансах. – sergzach
Если код, который вы опубликовали в вашем последующем ответе, является точной копией и вставкой, тогда есть проблема с отступом в последней строке - он должен быть на одном уровне. –