Django не создает никаких полей для пользователей, созданных вручную
Я создал сайт eccomerce. на нем есть страница регистрации, где пользователи создают свой аккаунт & затем могут заказать что-либо. если я создаю пользователя из панели администратора, то все работает отлично. но если я создаю пользователя из front end моей страницы регистрации с помощью React js, то этот пользователь не может ничего заказать, то есть когда я отправляю данные с помощью fetch django не хранит и не создает никаких данных для этого пользователя. Почему? В чем проблема? Я использую Rest Api в бэкенде & посылаю данные через fetch для отправки данных. но fetch не работает, но не работает, если я использую пользователя, который был создан из панели администратора(./admin). Я делаю что-то неправильно, создавая данные пользователя вручную в моих представлениях???
serializers.py
from pyexpat import model
from rest_framework import serializers
from App.models import *
from django.contrib.auth.models import User
class userSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
class productSerializers(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class customerSerializers(serializers.ModelSerializer):
class Meta:
model = Customer
fields = '__all__'
class orderSerializers(serializers.ModelSerializer):
class Meta:
model = Order
fields = '__all__'
class orderItemSerializers(serializers.ModelSerializer):
class Meta:
model = OrderItem
fields = '__all__'
class shippingAddressSerializers(serializers.ModelSerializer):
class Meta:
model = ShippingAddress
fields = '__all__'
передняя страница регистрации:
import React,{useState} from 'react'
import { useGlobalContext } from './Context'
import {Link, useNavigate} from 'react-router-dom'
import './registration.css'
const userCreateUrl = 'http://127.0.0.1:8000/api/get-user-data/'
export default function Register() {
const {loginUser} = useGlobalContext()
const [username,setUsername] = useState('')
const [email,setEmail] = useState('')
const [password1,setPassword1] = useState('')
const [password2,setPassword2] = useState('')
const [processing,setProcessing] = useState(false)
const history = useNavigate()
const registerUser = async (e)=>{
e.preventDefault()
setProcessing(true)
fetch(userCreateUrl,{
method:'POST',
headers:{
'Content-Type':'application/json',
},
body:JSON.stringify({username:username,email:email,password:password1,password:password2})
}
)
setTimeout(()=>{
history('/login')
},3000)
}
return (
<div className="registration">
<img src="https://images-na.ssl-images-amazon.com/images/G/01/gc/designs/livepreview/a_generic_white_10_us_noto_email_v2016_us-main._CB627448186_.png" className='login-logo' alt="Amazon Logo" />
<div className="login-container">
<Link to='/' style={{marginBottom:'0rem'}}>Back</Link>
<h3>Create a new account</h3>
<form className="form" onSubmit={registerUser}>
<h5>Username:</h5>
<input type="text" value={username} name='username' onChange={(e)=>setUsername(e.target.value)} />
<h5>Email:</h5>
<input type="email" value={email} name='email' onChange={(e)=>setEmail(e.target.value)} />
<h5>Password:</h5>
<input type="password" value={password1} name='password1' onChange={(e)=>setPassword1(e.target.value)} />
<h5>Password:</h5>
<input type="password" value={password2} name='password' onChange={(e)=>setPassword2(e.target.value)} />
<button className="login-btn" type='submit'>{processing ? 'Processing...' : "Sing-Up"}</button>
{/* <p className="terms">By continuing, you agree to Amazon's Conditions of Use and Privacy Notice.</p>
<div className="new-acc">
<p className='new'>New to Amazon?</p>
<hr />
<br />
<button className="create-btn">Create Your Amazon Account</button>
</div> */}
</form>
</div>
</div>
)
}
Проблема заключается в том, что в представлении getUserData
, которое вы используете для создания пользователя, вы не создаете экземпляр модели User, а запрашиваете его с помощью User.objects.get()
. Поскольку пользователь еще не существует, представление выдаст ошибку DoesNotExist.
Я не уверен в цели использования модели User и модели Customer. Возможно, лучшим выбором будет создание пользовательской модели .
Если вы все еще хотите использовать модель пользователя по умолчанию, вы должны создать пользователя, используя User.objects.create_user(username=username, password=password)
, как предложено в документации