Ввод данных в форме не сохраняется в базе данных
Эту модель я создал для создания формы. Два дополнительных поля добавляются в форму с помощью абстрактного пользователя. models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
phone=models.CharField(max_length=20)
profile_pic=models.ImageField(upload_to="dp",null=True,blank=True)
Форма регистрации наследуется от UserCreationForm.
forms.py
from django.contrib.auth.forms import UserCreationForm
from socialapp.models import MyUser
from django import forms
class RegistrationForm(UserCreationForm):
widgets={
"password1":forms.PasswordInput(attrs={"class":"form-control"}),
"password2":forms.PasswordInput(attrs={"class":"form-control"})
}
class Meta:
model=MyUser
fields=["first_name","last_name",
"username","email",
"phone","profile_pic",
"password1","password2"]
widgets={
"first_name":forms.TextInput(attrs={"class":"form-control"}),
"last_name":forms.TextInput(attrs={"class":"form-control"}),
"username":forms.TextInput(attrs={"class":"form-control"}),
"email":forms.TextInput(attrs={"class":"form-control"}),
"phone":forms.TextInput(attrs={"class":"form-control"}),
"profile_pic":forms.FileInput(attrs={"class":"form-control"}),
}
Вот представление для сопоставления с шаблоном views.py
from django.shortcuts import render
from socialapp.forms import RegistrationForm
from socialapp.models import MyUser
from django.views.generic import CreateView
from django.urls import reverse_lazy
class SignupView(CreateView):
model=MyUser
form_class=RegistrationForm
template_name="register.html"
success_url=reverse_lazy("register")
Вероятно, это не сработало, потому что, во-первых, у вас есть модель MyUser
и все атрибуты этой модели phone
и profile_pic
. Добавление всех этих атрибутов в форму может или не может хорошо отображаться в шаблоне, но это не меняет модель.
Способ сделать это - добавить атрибуты в модель, а затем изменить их по своему вкусу в формах.
Во-вторых, вы даже не сохранили форму в своих представлениях :-) Попробуйте так:
class SignupView(CreateView):
model=MyUser
form_class=RegistrationForm
template_name="register.html"
success_url=reverse_lazy("register")
def form_valid(self,form):
return super().form_valid(form)
не забудьте зарегистрировать модель MyUser
в админке, если вы этого еще не сделали.
from django.contrib import admin
# Register your models here.
from .models import MyUser
admin.site.register(MyUser)
Вы не опубликовали шаблон, но ваш шаблон должен быть похож на этот:
<form action="" method="POST" enctype="multipart/form-data">
{{form|crispy}}{%csrf_token%}
<button class="btn btn-lg bg-primary " type="submit" style='float: right;margin: 5px 0 10px;'> Done! </button>
</form>
Вы также можете рассмотреть возможность использования представления на основе функций, чтобы вы могли лучше контролировать то, что происходит в представлениях.
Обязательно объясните, как я могу вам помочь, если вы все еще застряли.
Приятного дня :-)