Related Object Does Not Exist at /account_settings/

169 Views Asked by At

Here is the code of my project that contains the files models.py,
views.py and urls.py. It showing me the error that object does not exist. Exception Type: RelatedObjectDoesNotExist Exception Value: User has no student.

Now where have I made a mistake? I'm a newbie. I searched a lot but unable to resolve it.

# Create your models here.
            
            class School(models.Model):
                schoolid = models.AutoField(primary_key=True)
                schoolname = models.CharField(max_length=50, null= True)
              #  schoolimage = models.ImageField()
                schoolcontactno = models.CharField(max_length=13, null= 
        True)
                schooladdress = models.CharField(max_length=500)
                createddate = models.DateTimeField(null= True)
                schoolemail = models.EmailField(null= True)
                password = models.CharField(max_length=13,null= True)
            
                def __str__(self):
                    return self.schoolname
            
            class Section(models.Model):
                sectionid = models.AutoField(primary_key=True)
                sectionname = models.CharField(max_length=500,null= True)
                schoolid = models.ForeignKey(School,null= 
        True,on_delete=models.SET_NULL)
            
            
            class Status(models.Model):
                statusid = models.AutoField(primary_key=True)
                statustype = models.CharField(max_length=50,null=True)
            
            class Client(models.Model):
                userid = models.AutoField(primary_key=True)
                username = models.CharField(max_length=50,null = True)
                ceratedon = models.DateTimeField(null = True)
                email = models.CharField(max_length=50,null = True)
                password = models.CharField(max_length=13)
                certificatetypename = models.CharField(max_length=100,null 
        = True)
                cnic = models.CharField(max_length=50,null = True)
                contactnumber = models.CharField(max_length=13,null = True)
             #   image = models.CharField(max_length='',null = True)
                status = models.ForeignKey(Status, 
        null=True,on_delete=models.DO_NOTHING)
                confirmpassword = models.CharField(max_length=13,null = 
        True)
            
            class TblClass(models.Model):
                classid = models.AutoField(primary_key=True)
              #  name = models.CharField(max_length=50,null= True)
                schoolid = models.ForeignKey(School,null= 
        True,on_delete=models.SET_NULL)
            
            
            class RoleName(models.Model):
                roleid = models.AutoField(primary_key=True)
                rolename = models.CharField(max_length=50,null=True)
            
            class Course(models.Model):
                courseid = models.AutoField(primary_key=True)
                coursedescription = models.CharField(max_length=500,null= 
        True)
                coursename = models.CharField(max_length=50,null= True)
                userid = models.ForeignKey(Client,null= 
        True,on_delete=models.DO_NOTHING)
                code = models.CharField(max_length=50,null= True)
                videolink = models.CharField(max_length=500 ,null= True)
                roleid = 
        models.ForeignKey(RoleName,null=True,on_delete=models.DO_NOTHING)
                createddate = models.DateTimeField()
             #   imagelink = models.CharField(max_length='')
                duration = models.DateTimeField()
            #    longdes = models.CharField(max_length='')
                coursetype = models.CharField(max_length=50)
                classid = 
        models.ForeignKey(TblClass,null=True,on_delete=models.DO_NOTHING)
             #   assignto = models.CharField(max_length='')
                status = models.BinaryField(null = True)
            
            class Day(models.Model):
                id = models.AutoField(primary_key=True)
                name = models.CharField(max_length=50,null =True)
            
            class Exam(models.Model):
                
                examid = models.AutoField(primary_key=True)
                examname = models.CharField(max_length=500,null=True)
            
            class SchoolAssignment(models.Model):
                assignmentid = models.AutoField(primary_key=True)
                assignmentname = models.CharField(max_length=50,null=True)
                classid = 
        models.ForeignKey(TblClass,null=True,on_delete=models.SET_NULL)
                courseid = models.ForeignKey(Course, 
        null=True,on_delete=models.SET_NULL)
                assignmenturl = models.CharField(max_length=500,null=True)
                duration = models.DateTimeField(null=True)
                schoolid = 
        models.ForeignKey(School,null=True,on_delete=models.SET_NULL)
                createddate = models.DateTimeField(null=True)
                userid = 
        models.ForeignKey(Client,null=True,on_delete=models.DO_NOTHING)
            
            
            class TimeTable(models.Model):
                id = models.AutoField(primary_key=True)
                classid = 
        models.ForeignKey(TblClass,null=True,on_delete=models.DO_NOTHING)
                courseid = 
        models.ForeignKey(Course,null=True,on_delete=models.DO_NOTHING)
                sectionid = 
        models.ForeignKey(Section,null=True,on_delete=models.DO_NOTHING)
                starttime = models.DateTimeField(null=True)
                endtime = models.DateTimeField(null=True)
                allocationstatus = 
        models.CharField(max_length=100,null=True)
                dayid = 
        models.ForeignKey(Day,null=True,on_delete=models.DO_NOTHING)
                schoolid = 
        models.ForeignKey(School,null=True,on_delete=models.DO_NOTHING)
            
            
            class Student(models.Model):
                user = models.OneToOneField(User,null 
        =True,on_delete=models.CASCADE)
                
                id = models.AutoField(primary_key=True)
                sname = models.CharField(max_length=200, null=True)
                phone = models.CharField(max_length=200, null=True)
                email = models.CharField(max_length=200, null=True)
                date_created = models.DateTimeField(auto_now_add=True, 
        null=True)
                regno = models.CharField(max_length=20,null=True)
                registrationdate = models.DateTimeField(null =True)
                address = models.CharField(max_length=100,null =True)
               # classid = models.ForeignKey(TblClass,null=True, 
        on_delete=models.SET_NULL)
               # schoolid = models.ForeignKey(School,null=True, 
        on_delete=models.SET_NULL)
               # sectionid = models.ForeignKey(Section,null=True, 
        on_delete=models.SET_NULL)
                std_profile = models.ImageField(default="download.png", 
        null = True,blank = True)
            
                
                def __str__(self):
                    return self.sname
            class StudentResult(models.Model):
                studentresultid = models.AutoField(primary_key=True)
                studentid = models.ForeignKey(Student,null 
        =True,on_delete=models.DO_NOTHING)
                courseid = 
        models.ForeignKey(Course,null=True,on_delete=models.DO_NOTHING)
                totalmarks = models.IntegerField(null = True)
                marksobtained = models.IntegerField(null = True)
                percentage = models.DecimalField(max_digits=2, 
        decimal_places=2,null = True)
                schoolid = models.ForeignKey(School,null = 
        True,on_delete=models.DO_NOTHING)
                classid = models.ForeignKey(TblClass,null = 
        True,on_delete=models.DO_NOTHING)
                createddate = models.DateTimeField(null = True)
                sectionid = 
        models.ForeignKey(Section,null=True,on_delete=models.DO_NOTHING)
                examid = 
        models.ForeignKey(Exam,on_delete=models.DO_NOTHING, null=True)
            
            class SubmitAssignment(models.Model):
                uploadid = models.AutoField(primary_key=True)
                assignmentid = models.ForeignKey(SchoolAssignment, 
        on_delete=models.DO_NOTHING)
                schoolid = 
        models.ForeignKey(School,on_delete=models.SET_NULL,null = True)
                studentid = models.ForeignKey(Student, 
        on_delete=models.SET_NULL,null = True)
                courseid = models.ForeignKey(Course, 
        on_delete=models.SET_NULL,null = True)
                uploadurl = models.CharField(max_length=500,null = True)
                createddate = models.DateTimeField(auto_now_add=True,null = 
        True)
            
            
            class StudentHistory(models.Model):
                studenthistoryid = models.AutoField(primary_key=True)
                studentid = models.ForeignKey(Student,null=True, 
        on_delete=models.DO_NOTHING)
                lastclass = models.CharField(max_length=50,null=True)
                createddate = 
        models.DateTimeField(auto_now_add=True,null=True)
                lastclasssection = 
        models.CharField(max_length=50,null=True)
            
                def __str__(self):
                    return self.studentid
        
        # Create your views here.
        @login_required(login_url='loginPage')
        def home(request):
            return render(request,'home.html')
        
        @unauthenticated_user
        def register(request):
        
            form = CreateUserForm()
            if request.method == 'POST':
                form = CreateUserForm(request.POST)
                if form.is_valid():
                    user = form.save()
                    username = form.cleaned_data.get('username')
                    
                    group = Group.objects.get(name = 'student')
                    user.groups.add(group)
                    messages.success(request, 'Account was created for ' + 
        username)          
                    return redirect('loginPage')
                                
            context = {'form':form}
            return render(request, 'register.html', context)
        
        @unauthenticated_user
        def loginPage(request):
            if request.method == 'POST':
                username = request.POST.get('username')
                password =request.POST.get('password')
                user = authenticate(request, username=username, 
        password=password)
                if user is not None:
                    login(request, user)
                    return redirect('userpage')
                else:
                    messages.info(request, 'Username OR password is 
        incorrect')
            context = {}
            return render(request, 'login.html', context)
        
        def logoutUser(request):
            logout(request)
            return redirect('loginPage')
        
        
        @login_required(login_url='loginPage')
        def about(request):
            return render(request,'about.html')
        
        @login_required(login_url='loginPage')
        def contact(request):
            return render(request,'home.html')
        
        
        @login_required(login_url='loginPage')
        @allowed_users(allowed_roles=['student'])
        def userPage(request):
            return render(request, 'user.html')
        
        @login_required(login_url='loginPage')
        @allowed_users(allowed_roles=['student'])
        def account_settings(request):
            student = request.user.student
            form = StudentForm(instance=student)
            if request.method == 'POST':
                form = StudentForm(request.POST, 
        request.FILES,instance=student)
                if form.is_valid():
                    form.save()
                    
                    
            context = {'form':form}
            return render(request, 'account_settings.html', context)
        
        @login_required(login_url='loginPage')
        @allowed_users(allowed_roles=['student'])
        def assignments(request):
            student = request.user.student
            form = StudentForm(instance=student)
            if request.method == 'POST':
                form = StudentForm(request.POST, 
        request.FILES,instance=student)
                if form.is_valid():
                    form.save()
                    
                    
            context = {'form':form}
            return redirect(request,'assignment.html',context)
            """it is urls of the code"""
        urlpatterns = [
        path("", views.home, name = 'home'),
        path("register/", views.register, name = 'register'),
        path("about/", views.about, name = 'about'),
        path("contact/", views.contact, name = 'contact'),
        path("login/", views.loginPage, name = 'loginPage'),
        path("logout/", views.logoutUser, name = 'logout'),
        path("userpage/", views.userPage, name = 'userpage'),
        path("account_settings/", views.account_settings, name = 
        'account_settings'),
        path("assignments/", views.assignments, name = 'assignments'),
        
        ]'''
1

There are 1 best solutions below

0
On

In your view functions: assignment and account_settings you have this line.

            student = request.user.student

I believe what the error is saying, is that you haven't created any StudentObject for this User yet. Looking at your registration view, I don't see you are creating one here too. Am I correct? In case every USER should have a STUDENT object, you could add one upon registration like this and fill out all the blank fields later.

@unauthenticated_user
def register(request):

    form = CreateUserForm()
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')

############################
            newstudent = Student(user=request.user)
            newstudent.save()
############################
     
            group = Group.objects.get(name = 'student')
            user.groups.add(group)
            messages.success(request, 'Account was created for ' + 
username)          
            return redirect('loginPage')
                        
    context = {'form':form}
    return render(request, 'register.html', context)