Django Factory Boy - общие рецепты обратных зависимостей (reverse ForeignKey)

Я новичок в FactoryBoy. Я пробую пример для точного примера в документах: обратные зависимости .

1) Верно ли, что упомянутая «UserLogFactory» «настолько очевидна», что ее нужно сделать самому, как в:

class UserLogFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = models.UserLog

2) Я получаю AttributeError:

объект типа «UserLog» не имеет атрибута «ACTION_CREATE»

Я поискал в Интернете и нашел 1 ссылку (отчет об ошибках github), которая, похоже, решил сам в тот же день. Он не упомянул решение, но из его комментариев я понял, что это нечто очевидное...

Заранее спасибо за помощь!
С уважением.


person MZA    schedule 19.06.2017    source источник


Ответы (1)


Согласно документам factory-boy относительно RelatedFactory и SubFactory, именованные параметры, которые вы определили при RelatedFactory создании, будут переданы UserLogFactory, так что ожидается, что action будет полем в UserLogFactory.

log = factory.RelatedFactory(UserLogFactory, 'user', action=models.UserLog.ACTION_CREATE)

AttributeError возникает из-за того, что в UserLog отсутствует определение константы для ACTION_CREATE, что, как я полагаю, является одним из возможных вариантов для поля UserLog.action.

Это возможный способ определить модель UserLog:

class UserLog(models.Model):
    ACTION_CREATE = 'CREATE'
    ACTION_UPDATE = 'UPDATE'

    ACTION_CHOICES = (
        (ACTION_CREATE, 'create'),
        (ACTION_UPDATE, 'update'),
    )
    user = models.ForeignKey(User)
    action = models.CharField(choices=ACTION_CHOICES)

Дополнительную информацию о choices см. в документах по выбору Django

person Alexey Milogradov    schedule 19.06.2017
comment
Привет Алексей, Спасибо за ответ; Чисто. Тем временем я нашел github.com/FactoryBoy/factory_boy/issues/58, где пример кода в основном показывает то же самое: нужно читать ACTION_CREATE как что-то, чтобы сделать себя. Я единственный, кто находит это немного неясным? То, что я вижу в factory_boy, мне нравится, но у меня небольшие проблемы с документами... - person MZA; 19.06.2017
comment
Этот вопрос не имеет прямого отношения к вашей проблеме. Речь идет о конфликте имен, и это исправлено. Вы можете повторно открыть проблему, упомянутую в вопросе, чтобы исправить это конкретное несоответствие документов. - person Alexey Milogradov; 19.06.2017