【问题标题】:how to solve error "'NoneType' object has no attribute 'day'" in django application如何解决Django应用程序中的错误“'NoneType'对象没有属性'day'”
【发布时间】:2021-06-13 00:37:47
【问题描述】:

我在我的应用程序中注意到了这个错误,“'NoneType' 对象没有属性 'day'”。我注意到的是。我有一个名为 course_schedule 的模型,课程表有周一到周日的选项。如果课程表是部分填充的,也就是说我只填充了几天,比如一周中完整的 7 天中的 3 天,我会收到错误消息,但是每当我填充课程表时,我会完全填充课程表模型,我不会有错误,一切正常。

错误日志:

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('/')

【问题讨论】:

  • 确保sch 不是None
  • 好的,我正在测试它

标签: python django django-models django-views django-templates


【解决方案1】:

看起来 sch 可能是 None。

您应该始终将您的对象放在 try...except 块中,或者您可以使用内置的get_object_or_404

【讨论】:

    【解决方案2】:

    跟随您的add_courses 模型的previous question sn-p。

    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
    

    您有以下从Assign_teacher_to_coursescourse_schedule 的关系路径:

    Assign_teacher_to_courses -> add_courses -> course_schedule
    

    因此,要获取get_course_name_th 中每个course 的时间表,您应该将sch = course_schedule.objects.get(id=course.Course_Name.pk) 更改为sch = course.Course_Name.schedule

    【讨论】:

    • 感谢您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2021-08-25
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多