如何修复错误“'NoneType'对象没有属性'day'"?在Django网站 [英] How can I fix error "'NoneType' object has no attribute 'day'" in django website

查看:23
本文介绍了如何修复错误“'NoneType'对象没有属性'day'"?在Django网站的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序中注意到此错误,'NoneType'对象没有属性'day'".我注意到的是.我有一个名为course_schedule的模型,课程表可以选择周一到周日.如果课程表是部分填充的,也就是说,我只填充了几天,例如一周中总共7天中只有3天,则出现错误,但是每当填充课程表完全填充课程表模型时,我就不会出现错误,一切正常.

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.

错误日志:

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 1609, in student_course_list
    get_all = getall(2021, sch.day)

Exception Type: AttributeError at /en/student_course_list
Exception Value: 'NoneType' object has no attribute 'day'

models.py

models.py

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

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

views.py

def getall(year, day):
    dates = {
        "Sun": 6,
        "Mon": 0,
        "Tue": 1,
        "Wed": 2,
        "Thurs": 3,
        "Fri": 4,
        "Sat": 5
    }
    d = date(year, 1, 1)                    # January 1st
    d += timedelta(days = dates[day] - d.weekday())  # First day
    while d.year == year:
        yield d
        d += timedelta(days = 7)

def student_course_list(request):

    stu_course_id = request.POST.get('stu_course_id')

    stdnt = add_students_by_manager.objects.get(student_ID=request.session['Stu_id'])
    my_announcement = Announcement_by_dean.objects.filter(student_id=stdnt.pk).order_by('-id')
    print(my_announcement)

    if request.method=="POST":
        id_name = student_usid+' - '+student_usname
        courses = add_courses.objects.filter(student=stu_course_id_get)
        days = {}
        for course in courses:
            sch = course_schedule.objects.filter(id=course.pk).first()

            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)+" "+str(course.course_code))

                except KeyError:

                    days[str(date)] = [str(course.Course_Name)+" "+str(course.course_code),]

        # print(days)

        context = {'days': days, 'courses':courses, 'my_announcement':my_announcement}
        return render(request, 'student_course_list.html', context)
    else:
        return redirect('/')

推荐答案

您可以将 sch = course_schedule.objects.filter(id = course.pk).first()更改为 sch= course.schedule .

由于每个课程只有一个时间表,因此不需要查询,因此您可以在 add_courses 中使用 ForeignKey 属性.

There is no need to query like that, since there is only one schedule per course, so you can use the ForeignKey attribute in add_courses.

这篇关于如何修复错误“'NoneType'对象没有属性'day'"?在Django网站的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆