Заводское создание объекта с несколькими значениями по умолчанию (обратный внешний ключ)
Я использую django 3.2 и factory boy 3.2.1 и пытаюсь создать фабрику модели плагина, которая автоматически создает 2 подходящих элемента конфигурации с ним:
class PluginConfiguration(Configuration):
plugin = models.ForeignKey(
ProductPlugin,
null=False,
blank=False,
on_delete=models.CASCADE,
related_name="configurations",
)
key = models.CharField(max_length=100,)
value = models.CharField(max_length=255,)
category = models.PositiveIntegerField(choices=Category.choices, default=Category.GENERAL,)
class PluginConfigurationFactory(factory.django.DjangoModelFactory):
class Meta:
model = PluginConfiguration
plugin = factory.SubFactory(ProductPluginFactory)
key = factory.fuzzy.FuzzyText(length=20)
value = factory.fuzzy.FuzzyText(length=20)
category = PluginConfiguration.Category.GENERAL
class ProductPluginFactory(factory.django.DjangoModelFactory):
class Meta:
model = ProductPlugin
name = "MyPlugin"
type = ProductPlugin.Type.APP
password_required = False
@factory.post_generation
def configurations(obj, create, extracted, **kwargs):
if not create:
return
if extracted:
for n in range(extracted):
PluginConfigurationFactory(plugin=obj)
else:
PluginConfigurationFactory(
plugin=obj,
key="base_name",
value="cobra",
category=PluginConfiguration.Category.GENERAL,
)
PluginConfigurationFactory(
plugin=obj,
key="appId",
value="MyApp",
category=PluginConfiguration.Category.GENERAL,
)
Extracted в этом случае должен просто создать определенное количество элементов конфигурации. Проблема в том, что если я пытаюсь обратиться к plugin.configurations.all(), то получаю сообщение об ошибке
> configs = plugin.configurations.all()
E AttributeError: 'PostGeneration' object has no attribute 'all'
Фабрика называется так
plugin = ProductPluginFactory()
configs = plugin.configurations.all()
Поскольку это не простой атрибут, а отношение (RelationManager), ошибка верна, но как мне тогда сделать то, что я хочу?
Спасибо и пожелания Matt