Django is not creating any fields with users created manually

i've created a eccomerce website. this has a registration page where users creates their user account & then can order anything. if i create a user from admin panel, then everything works perfectly. but if i create a user from front end of my registration page using React js, then that user can't order anything, meaning when i post a data using fetch django doesn't store or create any data for that user. why? what's the issue here? i'm using Rest Api in backend & posting data through fetch to send data. but the fetch fails but not if i use a user which was created from admin panel(./admin). am i doing anything wrong in creating the user data manually at my views???

#my_views

from django.shortcuts import redirect
from django.contrib.auth.hashers import make_password

from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView



from App.models import *
from api.forms import RegisterForm
from .serializers import *
from django.contrib.auth.models import User


class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)

        # Add custom claims
        token['username'] = user.username
        # ...

        return token

class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer

@api_view(['GET','POST'])
def getRoutes(request):
    routes = [
        '/api/token',
        '/api/refresh',
    ]
    return Response(routes)

@api_view(['POST'])
def getUserData(request):
    if request.method == 'POST':
        
        serializer = userSerializers(data={"username":request.data['username'],"email":request.data["email"],"password":make_password(request.data['password'])})
        if serializer.is_valid():
            serializer.save()
        username = request.data['username']
        email = request.data['email']
        user = User.objects.get(username=username,email=email)
        form = Customer.objects.create(name=username,email=email,user=user)
        print(request.data)
    if request.method == 'GET':
        user = User.objects.all()
        serializer = userSerializers(user,many=True)
    return Response(serializer.data)

@api_view(['GET','POST'])
def getCustomerData(request):
    if request.method=='GET':
        customer = Customer.objects.all()
        serializers = customerSerializers(customer,many=True)
        return Response(serializers.data)
    if request.method=='POST':
        serializers = customerSerializers(data=request.data)
        if serializers.is_valid():
            serializers.save()
        return Response(serializers.data)
@api_view(['GET'])
def getProductData(request):
    item = Product.objects.all()
    serializer = productSerializers(item,many=True)
    
    return Response(serializer.data)

@api_view(['GET','POST'])
def getOrderData(request):
    if request.method == 'GET':
        item = Order.objects.all()
        serializer = orderSerializers(item,many=True)
    if request.method == 'POST':
        serializer = orderSerializers(data=request.data)
        if serializer.is_valid():
            serializer.save()
    return Response(serializer.data)

@api_view(['GET','POST'])
def getOrderItemData(request):
    if request.method=='GET':
        item = OrderItem.objects.all()
        serializer = orderItemSerializers(item,many=True)
    if request.method=='POST':
        print(request.data)
        serializer = orderItemSerializers(data=request.data)
        if serializer.is_valid():
            serializer.save()
    return Response(serializer.data)

@api_view(['GET','POST'])
def getShippingAddressData(request):
    if request.method == 'GET':
        item = ShippingAddress.objects.all()
        serializer = shippingAddressSerializers(item,many=True)
    if request.method == 'POST':
        serializer = shippingAddressSerializers(data=request.data)
        if serializer.is_valid():
            serializer.save()
    return Response(serializer.data)

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__'

front-end registration page:

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>
  )
}

The problem is that in your view getUserData that you use to create a user, you are not creating an instance of the User model, you are querying for one using User.objects.get(). Since the user does not exists yet, the view will raise a DoesNotExist error.

I'm not sure about the purpose of using the User model and the Customer model. Maybe the best choice would be to create a custom user model.

If you still want to user the default user model, you should create the user using User.objects.create_user(username=username, password=password) like suggested on the documentation

Back to Top