Django 键入对象';型号';没有属性';对象';-当它';很明显,在那里。。?

Django 键入对象';型号';没有属性';对象';-当它';很明显,在那里。。?,django,Django,当我试图通过Book.objects.create()创建新对象时,出现此错误: 对于此代码: # models.py class BookManager(models.Manager): def get_queryset(self): return super(BookManager, self).get_queryset().filter(type="book") def create(self, **kwargs):

当我试图通过
Book.objects.create()
创建新对象时,出现此错误:

对于此代码:

# models.py

class BookManager(models.Manager):
    def get_queryset(self):
        return super(BookManager, self).get_queryset().filter(type="book")

    def create(self, **kwargs):
        return super(BookManager, self).create(**kwargs)


class ChapterManager(models.Manager):
    def get_queryset(self):
        return super(ChapterManager, self).get_queryset().filter(type="chapter")

    def create(self, **kwargs):
        return super(ChapterManager, self).create(**kwargs)


class Text(models.Model):
    type = models.CharField(max_length=255, blank=False)  # for STI

    def __init__(self, *args, **kwargs):
        super(Text, self).__init__(*args, **kwargs)
        # If we don't have a subclass at all, then we need the type attribute to match
        # our current class.
        if not self.__class__.__subclasses__():
            self.type = self.__class__.__name__.lower()
        else:
            subclass = [
                x
                for x in self.__class__.__subclasses__()
                if x.__name__.lower() == self.type
            ]
            if subclass:
                self.__class__ = subclass[0]
            else:
                self.type = self.__class__.__name__.lower()


class Chapter(Text):
    objects = ChapterManager()

    class Meta:
        proxy = True


class Book(Text):
    objects = BookManager()

    class Meta:
        proxy = True
在可以看到
章节
书籍
的地方,对象明显有一个
对象
字段,指向自定义管理器

为了了解更多的上下文,我将用于我的模型


这个完全相同的代码适用于我的另一个项目,因此我不知道发生了什么。

我的test.py类并没有以TestCase结尾。也就是说,它应该是
类TestCase(TestCase):
而不是
类Test(TestCase):

你的代码看起来很好,你能通过完整的回溯和产生错误的代码吗?@IainShelvington-错误中没有其他内容。这是我运行
Book.objects.create()
tests时的完整错误消息:
错误:test\u test(library.tests.tests\u models.Book)--------------------------------------------------------------------------------------回溯(最近一次调用):test\u test Book.objects.create()中的文件“/app/library/tests/tests\u models.py”,第14行AttributeError:type对象“Book”没有属性“objects”
最奇怪的是,如果
Book.objects.create()
python manage.py shell中运行良好,
。。。。。。我正在用我的
test.py
文件更新注释,但它也是非常基本/标准的…啊,看来我的测试类结尾没有附加“TestCase”。问题解决了。谢谢。无关提示:super不需要使用类名。e、 g.:
super(ChapterManager,self)。create(**kwargs)
可以缩短为
super()。在Python3中create(**kwargs)
# models.py

class BookManager(models.Manager):
    def get_queryset(self):
        return super(BookManager, self).get_queryset().filter(type="book")

    def create(self, **kwargs):
        return super(BookManager, self).create(**kwargs)


class ChapterManager(models.Manager):
    def get_queryset(self):
        return super(ChapterManager, self).get_queryset().filter(type="chapter")

    def create(self, **kwargs):
        return super(ChapterManager, self).create(**kwargs)


class Text(models.Model):
    type = models.CharField(max_length=255, blank=False)  # for STI

    def __init__(self, *args, **kwargs):
        super(Text, self).__init__(*args, **kwargs)
        # If we don't have a subclass at all, then we need the type attribute to match
        # our current class.
        if not self.__class__.__subclasses__():
            self.type = self.__class__.__name__.lower()
        else:
            subclass = [
                x
                for x in self.__class__.__subclasses__()
                if x.__name__.lower() == self.type
            ]
            if subclass:
                self.__class__ = subclass[0]
            else:
                self.type = self.__class__.__name__.lower()


class Chapter(Text):
    objects = ChapterManager()

    class Meta:
        proxy = True


class Book(Text):
    objects = BookManager()

    class Meta:
        proxy = True