Пользователь не сохраняет данные в базе данных Django
views.py
def registerPage(request):
form = UserCreateForm()
if request.method=='POST':
form=UserCreateForm(request.POST)
if form.is_valid():
user=form.save(commit=False)
user.save()
return redirect('home')
return render(request,'base/signup.html',{'form':form})
model.py
class User(AbstractUser):
name = models.CharField(max_length=200,null=True)
email = models.EmailField(unique=True,null=True)
bio=models.TextField(null=True)
avatar = models.ImageField(upload_to='images/',null=True)
USERNAME_FIELD='email'
REQUIRED_FIELDS=['username']
forms.py
class UserCreateForm(UserCreationForm):
class Meta:
model = User
fields = ['name','email','password1','password2','bio','avatar']
когда я пытаюсь зарегистрироваться на html шаблоне, это не работает, но если я делаю это в панели администратора, это работает, как я могу решить это?
Прежде всего, обычно не рекомендуется использовать модель по умолчанию User
от django. Лучше создать модель Profile
с отношениями OneToOneField
с пользователем.
Кроме этого, ваша проблема заключается в вашей форме. Поскольку у вас есть avatar
, который является ImageField
, вам нужно изменить форму таким образом, чтобы она могла принимать FILES
.
Итак, что вам нужно сделать, это изменить вашу форму следующим образом:
<form method="post" action="" enctype="multipart/form-data" >
Когда вы пишете код на стороне клиента:
- используйте multipart/form-data, когда ваша форма включает в себя какие-либо
<input type="file">
элементы.
Чтобы сделать ваш POST request
действительным, вам нужно также получить ваш FILES
на вашем представлении. Это можно сделать, изменив ваш код на:
if request.method=='POST':
form=UserCreateForm(request.POST, request.FILES)
if form.is_valid():
....