Как создать пользовательский класс, имеющий отношение «многие ко многим» у фабричного мальчика? - PullRequest
0 голосов
/ 23 апреля 2019

Мои модели следующие:

class Question(models.Model):
    content = models.CharField(
        max_length=1000,
        blank=False,
        default='',
        )

    def __str__(self):
        return self.content


class OptionGroup(models.Model):

    question = models.ForeignKey(
        'Question',
        on_delete=models.CASCADE,
        default='',
        )

    options = models.ManyToManyField('Option')


class Option(models.Model):

    content = models.CharField(
        max_length=1000,
        blank=False,
        default='',
        )

Мои заводы таковы:

class QuestionFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = Question

    content = factory.Sequence(lambda n: 'Question %d' % n)


class OptionGroupFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = OptionGroup

    question = factory.SubFactory(QuestionFactory)

    @factory.post_generation
    def options(self, create, extracted, **kwargs):
        if not create:
            return

        if extracted:
            for option in extracted:
                self.options.add(option)


class OptionFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = Option

    content = factory.Sequence(lambda n: 'Option %d' % n)

Теперь для простоты использования я хотел создать класс фабрики вопросов, который создает два объекта OptionGroup, каждый из которых имеет два объекта Option. Для этого я использую эту фабрику, но она не работает:

class QWith2OptGrps4Options(QuestionFactory):
    option_group1 = factory.RelatedFactory(
        OptionGroupFactory,
        'question',
        options=(OptionFactory.create(), OptionFactory.create())
        )
    option_group2 = factory.RelatedFactory(
        OptionGroupFactory,
        'question',
        options=(OptionFactory.create(), OptionFactory.create())
        )

Я полагаю, что это связано с тем, как я объявляю OptionFactory, но я не знаю, как это сделать правильно. Любая помощь?

...