Скажем, у меня есть фабрика с двумя подзаводами, которые должны быть связаны. Какие ловушки (ы) предоставляет FactoryBoy для генерации до / после генерации, чтобы связать эти подфабрики?
class AppointmentFactory(factory.DjangoModelFactory):
class Meta:
model = Appointment
team_member = factory.SubFactory(TeamMemberFactory)
merchant_location = factory.SubFactory(MerchantLocationFactory)
Проверка того, что создается в сеансе оболочки, дает теоретически недопустимый объект - члена команды из другого места.
> appt = AppointmentFactory.create()
>
> print(appt.merchant_location)
> <MerchantLocation: object (3)>
>
> print(appt.team_member.merchant_location)
> <MerchantLocation: object (4)>
В идеале этот хук дал бы мне доступ к аргументам, передаваемым на фабрику, чтобы я мог определить, какой SubFactory использовать в качестве «источника правды» для отношений.
Пример логики:
# handle: AppointmentFactory(team_member=tm_A) or AppointmentFactory(location=loc_A)
@factory.my_desired_hook
def associate_stuff(self, *args, **kwargs):
if 'team_member' in kwargs and 'merchant_location' in kwargs:
pass . # assume caller taking responsibility for correctness
elif 'team_member' in kwargs:
self.merchant_location = team_member.merchant_location
elif 'merchant_location' in kwargs:
self.team_member.merchant_location = self.merchant_location