Ввод данных в форме не сохраняется в базе данных

Эту модель я создал для создания формы. Два дополнительных поля добавляются в форму с помощью абстрактного пользователя. 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>

Вы также можете рассмотреть возможность использования представления на основе функций, чтобы вы могли лучше контролировать то, что происходит в представлениях.

Обязательно объясните, как я могу вам помочь, если вы все еще застряли.

Приятного дня :-)

Вернуться на верх