Дополнительная информация о регистрации пользователя не может храниться в базе данных,например, phoneno playergameid, исключающее имя пользователя, пароль в django при использовании формы создания пользователя

#python #django #database #django-models #django-forms

Вопрос:

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

models.py

     from django.db import models
    class Playerinfo(models.Model):
        username = models.CharField(max_length=24)
        pubg_name= models.CharField(max_length=14)
        pubg_id = models.PositiveIntegerField()
        email_id = models.EmailField()
        phone_no = models.PositiveIntegerField()
        password1 = models.CharField(max_length=16)
        password2 = models.CharField(max_length=16)```
 

forms.py

     from bgmiapp.models import Playerinfo
    from django import forms
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth.models import User
    from django.forms import fields
    from django.forms.widgets import PasswordInput
    class RegisterForm(UserCreationForm):
        username = forms.CharField(max_length=24)
        pubg_name= forms.CharField(max_length=14)
        pubg_id = forms.IntegerField()
        email_id = forms.EmailField()
        phone_no = forms.IntegerField()
        password1 = forms.CharField(max_length=16,widget=PasswordInput)
        password2 = forms.CharField(max_length=16,widget=PasswordInput)
        class Meta():
            model = User
            fields = ('username','pubg_name','pubg_id','email_id','phone_no','password1','password2')
 

views.py

     from django.shortcuts import render,redirect
    from .forms import RegisterForm
    from django.contrib.auth.decorators import login_required
    from django.contrib.auth import authenticate,login
    # Create your views here.
    def register(request):
        form=RegisterForm()
        if request.method =='POST':
            form = RegisterForm(request.POST)
            if form.is_valid():
                form.save()
                username=form.cleaned_data.get('username')
                raw_password=form.cleaned_data.get('password1')
                user=authenticate(username=username,password=raw_password)
                login(request,user)
                return redirect('login')
        else:
            form=RegisterForm()
        return render(request,'bgmiapp/register.html',{'form':form})```
 

urls.py

     from django.contrib import admin
    from django.urls import path
    from bgmiapp import views
    from django.contrib.auth import views as auth_views
    
   

    urlpatterns = [
            path('admin/', admin.site.urls),
            path('register/',views.register,name='register'),
            path('login/',auth_views.LoginView.as_view(template_name='bgmiapp/login.html'),name='login'),
            path('accounts/profile/',views.profile,name='profile'),
        ]
 

Ответ №1:

в forms.py, вы использовали:

 class Meta():
    model = User
 

хотя ваша информация поступает не из модели пользователя, а из модели Playerinfo, решением было бы изменить ее на:

 class RegisterForm(UserCreationForm):
    class Meta():
        model = Profile
        fields = '__all__'
 
  • вместо того, чтобы переписывать все поля, форма получит их непосредственно из вашей модели
  • вместо записи всех полей используйте метод all

но идеальным вариантом было бы оставить пользователя таким, какой он есть, и иметь отношение один к одному

 class Playerinfo(models.Model):
  user = models.OneToOneField(User,on_delete=models.CASCADE)
  pubg_name= models.CharField(max_length=14)
  pubg_id = models.PositiveIntegerField()
  email_id = models.EmailField()
  phone_no = models.PositiveIntegerField()


  
 

Комментарии:

1. вот хорошая статья/учебник о том, как вы можете это сделать, simpleisbetterthancomplex.com/tutorial/2016/07/22/…

2. В form.py Форма регистрации(форма создания пользователя): Мета-класс(): модель = Поля профиля = ‘ все