#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 Форма регистрации(форма создания пользователя): Мета-класс(): модель = Поля профиля = ‘ все