AttributeError: 类型对象...没有属性'objects

9 投票
4 回答
27170 浏览
提问于 2025-04-17 04:26

这是 models.py 文件的一部分

class Hardware_type(models.Model):
    type = models.CharField(blank = False, max_length = 50, verbose_name="Type")
    description = models.TextField(blank = True, verbose_name="Description")
    slug = models.SlugField(unique = True, max_length = 255, verbose_name = "Slug")

class Software_type(models.Model):
    type = models.CharField(blank = False, max_length = 50, verbose_name="Type")
    description = models.TextField(blank = True, verbose_name="Description")
    slug = models.SlugField(unique = True, max_length = 255, verbose_name = "Slug")

现在我遇到了一些问题

>>> sw = Software_type.objects.get(slug='unix')
>>> sw
<Software_type: Unix>
>>> hw = Hardware_type.objects.get(slug='printer')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: type object 'Hardware_type' has no attribute 'objects'

我不知道为什么会这样。有没有人能帮我一下?

补充说明:

抱歉,我没有发完整代码 - 问题解决了。在我另一个类里,我有

hardware_type = models.ManyToManyField(Hardware_type, verbose_name="Hardware Type")

把 hardware_type 改成 hw_type 后 - 一切正常。 我之前不知道这会导致问题。

4 个回答

1

你的代码在我这儿能正常运行:

>>> hw = Hardware_type.objects.get(slug='111')
>>> hw
<Hardware_type: Hardware_type object>

不过,使用关键字 type 可能有点危险,建议你最好不要用它。

13

如果你给一个模型添加了一个自定义管理器,那么默认的管理器 objects 就不会自动创建了。你要么自己在类定义里添加一个,要么就继续使用你自定义的管理器。

1

结果发现,只有在 Django 控制台里才开始工作。

后来我注意到我在 forms.py 里有一些旧代码。

class Hardware_type(forms.ModelForm):
    class Meta:
        model = Hardware_type

所以它就没法正常工作,那天真是个糟糕的命名类的日子等等。

撰写回答