Пользователь не сохраняет данные в базе данных 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():
            ....
Вернуться на верх