Тестовый случай дает объект ошибки, не имеет атрибута '_meta'

У меня есть следующий тестовый пример Django:

objects = ActionManager()
action = objects.log_action(user=self.test_user)
self.assertIsInstance(action, Action)

Однако из-за нетрадиционного способа доступа к менеджеру в приведенном выше примере я получаю эту ошибку:

приложение = model._meta.app_label

AttributeError: объект «NoneType» не имеет атрибута «_meta»

Менеджер:

class ActionManager(models.Manager):

    def log_action(self, user, content_object):
        action = self.model(
            user=user,
        )
        user.save(using=self._db)
        return action

Я предполагаю, что причина этого в том, что менеджер не привязан к модели Action.objects.log_action, поэтому self.model не работает. Это то, что я предполагаю, происходит.

Мой вопрос в том, как я могу решить эту проблему, сохраняя при этом self.model и мой тестовый пример?


person Prometheus    schedule 06.05.2015    source источник
comment
Можете ли вы объяснить, почему вы хотите сделать это, а не помещать определение objects в модель, как обычно?   -  person Daniel Roseman    schedule 06.05.2015
comment
@DanielRoseman только потому, что я следил за этим руководством по тестированию менеджеров в Django: bradmontgomery.net/blog/2013/04/07/django-manager-testing-woes   -  person Prometheus    schedule 06.05.2015


Ответы (1)


Нет никаких причин, по которым вы не можете установить модель самостоятельно.

objects = ActionManager()
objects.model = MyModel
person Daniel Roseman    schedule 06.05.2015
comment
как это могло работать? разве это не циклическая ссылка на саму модель? - person stantonk; 09.06.2015