I have a piece of code and each time I want to render the frontend template, it gives just 'None' at every segment such as name, phone etc. When I want to see it from admin page, it throws an error:
TypeError at /admin/accounts/student/2/change/
str__ returned non-string (type NoneType)
I'm completely new to Django. If anyone could help me, I'll be very grateful. Thanks in advance.
Here is my models.py:
from django.contrib.auth.models import User
# Create your models here.
class Student(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
phone = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200, null=True)
profile_pic = models.ImageField(null= True, blank= True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
def __str__(self):
return self.name
class Tag(models.Model):
name = models.CharField(max_length=200, null=True)
def __str__(self):
return self.name
class Books(models.Model):
CATEGORY = (
('Physics', 'Physics'),
('Chemistry', 'Chemistry'),
('Mathematics', 'Mathematics'),
)
name = models.CharField(max_length=200, null=True)
author = models.CharField(max_length=200, null=True)
price = models.FloatField(null=True)
category = models.CharField(max_length=200, null=True, choices=CATEGORY)
description = models.CharField(max_length=200, null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.name
class Issue(models.Model):
STATUS = (
('Pending', 'Pending'),
('Out for delivery', 'Out for delivery'),
('Delivered', 'Delivered'),
)
student = models.ForeignKey(Student, null=True, on_delete= models.SET_NULL)
book = models.ForeignKey(Books, null=True, on_delete= models.SET_NULL)
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS)
def __str__(self):
return self.book.name
Here is my admin.py file:
from . models import *
# Register your models here.
admin.site.register(Student)
admin.site.register(Books)
admin.site.register(Tag )
admin.site.register(Issue)
Error during template rendering:
__str__ returned non-string (type NoneType)
1 {% load i18n static %}<!DOCTYPE html>
2 {% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
3 <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
4 <head>
5 <title>{% block title %}{% endblock %}</title>
6 <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}">
7 {% if not is_popup and is_nav_sidebar_enabled %}
8 <link rel="stylesheet" type="text/css" href="{% static "admin/css/nav_sidebar.css" %}">
9 <script src="{% static 'admin/js/nav_sidebar.js' %}" defer></script>
10 {% endif %}
Finally I solved the problem. In Student
model, I just replaced it:
return str(self.name)
instead return self.name