【问题标题】:factory_boy has no attribute 'objects'factory_boy 没有属性“对象”
【发布时间】:2018-04-04 13:56:30
【问题描述】:

我正在尝试编写 Django 测试。我收到此错误:

.../lib/python3.5/site-packages/factory/django.py”,第 118 行,在 _get_manager manager = model_class.objects AttributeError: type object 'MyClassView' has no attribute 'objects'

这是在尝试设置它以进行测试时失败的 setUp 方法(和导入)。 (产生错误的代码运行)

import django
django.setup()
from app_name.tests.app_name_factory import MyClassViewFactory
from app_name import models

class Test_MyClassView(TestCase):
    def setUp(self):
        self.MyClassView = MyClassViewFactory()

这是我的模型:

class MyClassView(models.Model):
    state = models.CharField('State', max_length=2, null=True)
    division = models.CharField('Division', max_length=2, null=True)
    name = models.CharField('Name', max_length=40, null=True)
    choice_objects = MyClassViewManager1()

这是我的工厂类:

from factory.django import DjangoModelFactory
import factory.fuzzy
import factory
from app_name import models
from faker import Factory as FakerFactory
faker = FakerFactory.create()

class MyClassViewFactory(DjangoModelFactory):
    class Meta:
        model = models.MyClassView
    state = 'WI'
    division = 'OP' 
    name = factory.LazyAttribute(lambda x: faker.text(max_nb_chars=40))

我的其他工厂似乎工作正常,但 MyClassViewFactory 不行。我相信它与

有关
choice_objects = MyClassViewManager1()

我已经阅读了有关 factory_boy 自定义管理器的文档 http://factoryboy.readthedocs.io/en/latest/recipes.html#custom-manager-methods,但它只有一个示例,我不确定这是否是我的问题。 (现在花了几天时间)

提前感谢您的帮助。

【问题讨论】:

  • 您使用的是什么版本的 factory_boy?检查它似乎确实处理异常的源代码.. github.com/FactoryBoy/factory_boy/blob/master/factory/…
  • factory_boy==2.5.2
  • 版本 2.5.2 的日期为 2015 年 4 月。最新版本是 2.9.2,并且在 objects 不存在时使用 Django 模型的 _default_manager

标签: django django-models django-testing factory-boy


【解决方案1】:

如果您的模型类不是从 django models.Model 继承的,则基本上会发生此错误。所以“对象”不可用。 如果您想使用默认的 django “对象”:

class YourClass(models.Model):
    ....

或添加

objects = models.Manager()

正如 OP 回答的那样。

祝你好运!

【讨论】:

    【解决方案2】:

    我的问题是我的 models.py 模型 MyClassViewFactory 需要额外的一行:

    objects = models.Manager()
    

    无论如何,这允许进步!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-17
      相关资源
      最近更新 更多