Reputation: 759
I noticed this error in my application, "'NoneType' object has no attribute 'day'". What I have noticed about it is that. I have a model named course_schedule, the course schedule has an option of Monday to Sunday. If the course schedule is partially populated, that is I populate only some days, like 3 days out of the complete 7 days in a week, I get the error but whenever I populate the course schedule populate course schedule model completely, I don't have the error and everything works well.
error log:
Traceback (most recent call last):
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Habib\Documents\django\FIVERR\Ayyub_SMS\sms\schoolapp\views.py", line 1754, in sir_course
get_all = getall(2021, sch.day)
Exception Type: AttributeError at /en/sir_course
Exception Value: 'NoneType' object has no attribute 'day'
models.py
class Assign_teacher_to_courses(models.Model):
Course_Name = models.ForeignKey(add_courses, on_delete=models.CASCADE)
Teacher_Name = models.ForeignKey(add_teacher_by_manager, on_delete=models.CASCADE)
def __str__(self):
return self.Course_Name.Course_Name+" - "+self.Teacher_Name.teacher_ID+" - "+self.Teacher_Name.teacher_name
class course_schedule(models.Model):
days_choices = (
("Mon", 'Monday'),
("Tue", 'Tuesday'),
('Wed', "Wednessday"),
('Thurs', "Thursday"),
('Fri', "Friday"),
('Sat', "Saturday"),
("Sun", "Sunday"),
)
day = models.CharField(max_length=60, default="Sun")
time_session = models.CharField(max_length=150, default='8:00am')
end_session = models.CharField(max_length=150, default='10:00am')
def __str__(self):
return self.day
views.py
def sir_course(request):
if request.method == "POST":
get_course_name_th = Assign_teacher_to_courses.objects.filter(Teacher_Name=get_id_teach)
# print(get_course_name_th)
store_email_teacher_dtta = store_email_teach_new.objects.filter(Teacher_ID=teach_course_id)
days = {}
for course in get_course_name_th:
# print(course.Course_Name.syllabus)
sch = course_schedule.objects.get(id=course.Course_Name.pk)
get_all = getall(2021, sch.day)
lists = {}
for n in get_all:
date = n.strftime("%d/%m/%Y")
try:
if days[str(date)]:
days[str(date)].append(str(course.Course_Name.Course_Name)+" "+str(course.Course_Name.course_code))
except KeyError:
days[str(date)] = [str(course.Course_Name.Course_Name)+" "+str(course.Course_Name.course_code),]
# print(days)
context1 = {'get_course_name_t_cours':get_course_name_th, "days": days}
return render(request, 'teacher_page.html', context1)
else:
return redirect('/')
Upvotes: 0
Views: 1190
Reputation: 660
Looks like maybe sch is None.
You should always put your object get in a try...except block or you can use the inbuilt get_object_or_404
Upvotes: 2
Reputation: 4264
Following a previous question snippet of your add_courses
model.
class add_courses(models.Model):
Course_Name = models.CharField(max_length=200, blank=True)
Manager_Name = models.ForeignKey(Manager_login_information, on_delete=models.CASCADE, blank=True)
description = models.TextField(default='', blank=True)
syllabus = models.TextField(default='', blank=True)
student = models.ManyToManyField(add_students_by_manager, blank=True)
schedule = models.ForeignKey(course_schedule, on_delete=models.CASCADE, blank=True)
def __str__(self):
return self.Course_Name
You have the following relationship path from Assign_teacher_to_courses
to course_schedule
:
Assign_teacher_to_courses -> add_courses -> course_schedule
Therefore to get the schedule of each course
in get_course_name_th
you should change sch = course_schedule.objects.get(id=course.Course_Name.pk)
to sch = course.Course_Name.schedule
.
Upvotes: 2