MultiValueDictKey Ошибка при отправке формы - PullRequest
0 голосов
/ 16 марта 2020

Я новичок в Django, я работаю на веб-сайте, где пользователь может редактировать свой профиль (имя, фамилию, имя пользователя, адрес электронной почты), а также изменять свою фотографию профиля с помощью отдельной формы. Форма изображения профиля сохраняет файл при отправке, но форма обновления отображает 'MultiValueDicKeyError at / account / edit' 'profile_pi c' при отправке формы. Вот мои взгляды.

class Profile(models.Model):
    user = models.OneToOneField(User)
    bio = models.CharField(max_length=250,blank=True)
    profile_pic = models.ImageField(upload_to='profile_images', blank=True)

class UpdateUserForm(forms.ModelForm)
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'email')

class ProfilePic(forms.ModelForm)
    class Meta:
        model = Profile
        fields = ('profile_pic', )


def profile_edit_view(request):
    form = ProfilePic(request.Post or None, request.FILES or None)
    if request.method == 'POST':
        if form.is_valid():
            pp = form.save(commit=False)
            pp.user = request.user
            pp, created = Profile.objects.get_or_create(user=request.user)
            pp.profile_pic = request.FILES['profile_pic']
            pp.save()
            return redirect... 
    else:
         form = ProfilePic()

    updateform = UpdateUserForm(request.POST or None, instance=request.user)
    if request.method == 'POST':
        if updateform.is_valid():
            updateform.save()
            return redirect.... 
    else:
         updateform = UpdateUserForm()

context = {'form':form, 'updateform':updateform}

return render(request, 'profile_edit.html' context)

1 Ответ

1 голос
/ 16 марта 2020

Вы можете просто сохранить свои формы, как это, и позволить формам django обрабатывать ваши поля.

  def profile_edit_view(request):
        profile_form = ProfilePic()
        updateform = UpdateUserForm()   
        if request.method == 'POST':
            profile_form = ProfilePic(request.POST, request.FILES)
            updateform = UpdateUserForm(request.POST, instance=request.user)   
            if profile_form.is_valid() and updateform.is_valid():
               updateform.save()
               profile = profile_form.save(commit=False)
               profile.user = request.user
               profile.save()
               return redirect ...      
        return render(request, 'profile_edit.html' {'profile_form':profile_form,'updateform':updateform})

ОБНОВЛЕНИЕ

Я думаю, что вы этого не сделали при условии, что это в проекте / настройках

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

и это в вашем проекте / urls.py

urlpatterns=[
....
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...