Python Django Factory Boy迭代相关父对象

Python Django Factory Boy迭代相关父对象,python,django,fixtures,factory-boy,Python,Django,Fixtures,Factory Boy,我有一个客户机、绘图计划、行项目和服务器的项目 每个客户端都有一个DraftSchedule,每个DraftSchedule都有许多行项目 每个客户端都有许多服务器 每个行项目都有一个服务器 我有一些代码,可以用随机数据为每个DraftSchedule生成行项目。但是,结果行项包含Draftschedule客户端实际不拥有的服务器 class LineItemFactory(factory.django.DjangoModelFactory): class Meta:

我有一个客户机、绘图计划、行项目和服务器的项目

  • 每个客户端都有一个DraftSchedule,每个DraftSchedule都有许多行项目

  • 每个客户端都有许多服务器

  • 每个行项目都有一个服务器

我有一些代码,可以用随机数据为每个DraftSchedule生成行项目。但是,结果行项包含Draftschedule客户端实际不拥有的服务器

class LineItemFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = LineItem

    line_item_type = factory.Iterator(LineItemType.objects.all())
    draftschedule = factory.Iterator(DraftSchedule.objects.all())

    servers = factory.Iterator(Server.objects.all())  # <----- Problem line

    cost = factory.LazyAttribute(lambda x: faker.pydecimal(2, 2, positive=True))
    detail = factory.LazyAttribute(lambda x: faker.sentence())
    ...
其中,
client.servers
是相关的名称,但是函数不可移植,所以我有点卡住了

这是可能的还是我应该从另一个角度来解决问题?

您可以尝试使用:

您可以尝试使用:

servers = factory.Iterator(lambda x: x.draftschedule.client.servers.all())
@factory.lazy_attribute_sequence
def servers(obj, seq):
    all_servers = obj.draftschedule.client.servers.all()
    nb_servers = all_servers.count()
    return all_servers[seq % nb_servers]