Хук 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.
Что в этом плохого?