【问题标题】:AttributeError: Django Model has no attribute 'instructor_name'AttributeError:Django 模型没有属性“instructor_name”
【发布时间】:2020-04-28 23:26:26
【问题描述】:

试图弄清楚为什么我在这里遇到属性错误。我之前在 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) 将数据分配给一个对象.当我以与教程对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/

【问题讨论】:

    标签: python django sqlite django-models attributeerror


    【解决方案1】:

    简答:试试

    d.instructor_set.all()
    

    长答案:

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

    所以,如果你有一个Department对象d,那么获取属于该部门的所有inspector的方法是

    d.instructor_set.all()
    

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-26
      • 2020-09-02
      • 2016-01-10
      • 1970-01-01
      • 2019-07-20
      • 2021-04-11
      • 2013-10-12
      • 2012-08-17
      相关资源
      最近更新 更多