AttributeError: Django Model has no attribute 'instructor_name'

AttributeError: Django Model has no attribute 'instructor_name'

试图找出我在这里遇到属性错误的原因。我之前在 Django 教程中做过同样的过程,但在这里,我使用相同的逻辑得到了一个属性错误。

from django.db import models
from django.utils import timezone
# Create your models here.


class Department(models.Model):
    department_name = models.CharField(max_length=100)

    def __str__(self):
        return self.department_name


class Instructor(models.Model):
    belongs_to = models.ForeignKey(Department, on_delete=models.CASCADE)
    instructor_name = models.CharField(max_length=100)

    def __str__(self):
        return self.instructor_name

就像 Django 的文档教程一样,我试图在 python shell 中输出一个空查询集。当我创建数据并将其保存到数据库中时,我返回并使用 d = Department.objects.get(pk=1) 将数据分配给一个对象 我得到了所需的输出,因为我可以调用 d.department_name 并且它将输出名称我最初分配它。当我以教程对 q.choice_text.all() 的方式调用 d.instructor_name.all() 时,我没有返回一个空查询集,而是这个错误:

<ipython-input-18-29fd5cce7e1e> in <module>()
----> 1 d.instructor_name.all()

AttributeError: 'Department' object has no attribute 'instructor_name'

不太确定我在这里做了什么不同的事情。我读过其他有类似问题的帖子,但他们总是做一些略有不同的事情,我似乎无法将他们学到的知识应用到我的问题上。

参考教程如下:https://docs.djangoproject.com/en/3.0/intro/tutorial02/

简答:试试

d.instructor_set.all()

长答案:

django 在两个由外键连接的模型之间创建反向 link 的方法是在没有外键的模型中创建一个新属性(在本例中为 Department)。属性名称是 model name in lowercase_set

所以,如果你有一个部门对象d,获取属于该部门的所有检查员的方法是

d.instructor_set.all()

旁注:我认为是您的属性名称导致了问题。而不是“department_name”和“instructor_name”我会简单地使用“name",这样当你想打印部门名称时,只需说 "department.name" 即可读。

另外 d.inspector_name.all() 将更改为 d.name.all(),这很容易被检测为错误。