Я пытался создать метод для загрузки изображения профиля для пользователя во время регистрации. Для этого я создал пользовательскую ModelForm с полем файла и отобразил его вместе с UserCreationForm. Однако он выдает эту ошибку
ValueError at /signup
The UserProfile could not be created because the data didn't validate.
Файлы: -
models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
img=models.FileField(upload_to="profile/")
def __str__(self):
return self.user.username
forms.py
from django import forms
from . models import UserProfile
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
# Create your models here.
class ImgForm(forms.ModelForm):
class Meta:
model=UserProfile
fields=['img']
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.signin, name="signin"),
path('signup', views.signup, name="signup"),
path('logout', views.logout, name="logout")
]
views.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib import auth
from django.http import HttpResponse
from .forms import ImgForm
from django.contrib.auth.forms import UserCreationForm
# Create your views here.
def signup(request):
if request.method == 'POST':
form=UserCreationForm(request.POST)
imgform=ImgForm(request.POST, request.FILES)
if form.is_valid() and imgform.is_valid():
#looks good
user = form.save()
img=imgform.save()
img.user=user
return redirect('/')
else:
html = "<html><body><script>alert('Invalid form')</script></body></html>"
return HttpResponse(html)
else:
form=UserCreationForm()
imgform=ImgForm()
context={
'form':form,
'imgform':imgform
}
return render(request, "register/signup.html", context)
Форма HTML Код (Регистрация. html)
<div class="card-body">
<h1>Sign Up</h1>
<form action="{% url 'signup' %}" method="POST">
{% csrf_token %}
{{form.as_p}}
{{imgform.as_p}}
<div class="row">
<div class="col-4 text-right">
<input type="submit" class="btn btn-primary" value=" Sign Up " />
</div>
</div>
</form>
</div>
Что я пробовал:
Попытка удалить проверку достоверности imgform (удалена imgform.is_valid()
) в представлениях. py, удалил все экземпляры imgform и форму, представленную без проблем (без образа конечно). Поэтому я думаю, что ошибка вызвана неправильным сохранением imgform. Сам не смог разобраться в проблеме. Любая помощь приветствуется!
Спасибо.