Хук post_generation не будет вызываться при использовании FactoryBoy для генерации ManyToManyField

У меня есть модель продукта:

class Product(models.Model):
    ..
    category = TreeManyToManyField(Category)
    ...

    def __str__(self):
        return self.name

Как видите, у меня есть отношение "многие ко многим" к Категории. Следующая модель:

Категория:

class Category(MPTTModel):
    ...
    parent = TreeForeignKey(
        "self",
        on_delete=models.PROTECT,
        related_name="children",
        null=True,
        blank=True,
        verbose_name=_("parent of category"),
        help_text=_("format: not required"),
    )
    ...

Для создания поля категории с помощью FactoryBoy я сделал следующее:

class ProductFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = models.Product

    slug = faker.lexify(text="prod_slug_??????")
    name = faker.lexify(text="prod_name_??????")

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

        if extracted:
            for cat in extracted:
                self.category.add(cat)

и мой тест:

@pytest.mark.dbfixture
def test_inventory_db_product_insert_data(
    db,
    product_factory,
):
    new_product = product_factory.create(category=(1, 2, 3, 4, 5, 6))

...

Но я получаю следующую ошибку:

TypeError: Direct assignment to the forward side of a many-to-many set i
s prohibited. Use category.set() instead.

Что в этом плохого?

Вернуться на верх