factory_boy не имеет атрибута «объекты»

Я пытаюсь написать тесты Django. Я получаю эту ошибку:

.../lib/python3.5/site-packages/factory/django.py", строка 118, в _get_manager manager = model_class.objects AttributeError: объект типа "MyClassView" не имеет атрибута "объекты"

Вот метод 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()

Я прочитал документацию http://factoryboy.readthedocs.io/en/latest/recipes.html#custom-manager-methods для пользовательских менеджеров на factory_boy, но у него есть только один пример, и я не уверен, что это моя проблема. (потратил на это несколько дней)

Спасибо заранее за помощь.


person Alan Nelson    schedule 23.10.2017    source источник
comment
Какую версию factory_boy вы используете? Проверяя исходный код, он, кажется, обрабатывает исключение. .com/FactoryBoy/factory_boy/blob/master/factory/   -  person AndrewS    schedule 24.10.2017
comment
factory_boy==2.5.2   -  person Alan Nelson    schedule 24.10.2017
comment
Версия 2.5.2 датирована апрелем 2015 года. Самая последняя версия — 2.9.2, и в ней используется _default_manager модели Django, когда objects не существует.   -  person AndrewS    schedule 30.10.2017


Ответы (2)


Эта ошибка в основном возникает, если ваш класс модели не унаследован от моделей django.Model. Так что "объекты" недоступны. Если вы хотите использовать «объекты» django по умолчанию:

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

или добавить

objects = models.Manager()

как ответил ОП.

Удачи!

person urDMG    schedule 30.03.2018

Моя проблема заключалась в том, что моей модели models.py MyClassViewFactory требовалась дополнительная строка:

objects = models.Manager()

Во всяком случае, это позволило добиться прогресса!

person Alan Nelson    schedule 26.10.2017