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