0

Clients、Draftschedules、LineItems、および Servers を含むプロジェクトがあります。

  • 各クライアントには 1 つの DraftSchedule があり、各 Draftschedule には多くの Lineitem があります

  • 各クライアントには多数のサーバーがあります

  • 各 LineItem には単一のサーバーがあります

ここに画像の説明を入力

ランダム データを使用して DraftSchedule ごとに LineItems を生成するコードがいくつかあります。ただし、結果の LineItems には、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())
    ...

サーバー選択セットを、Lineitem が作成されている Draftschedule の親クライアントが所有するサーバーのみに制限したいと思います。

これを呼び出すLineItemFactory()と、新しい LineItem オブジェクトが返され、LineItem のサーバーが DraftSchedule に関連付けられたクライアントによって実際に所有されていることを保証できます。

私は次のことを試しました:

servers = factory.Iterator(lambda x: x.draftschedule.client.servers.all())

関連する名前はどこにclient.serversありますが、関数は反復可能ではないため、少し行き詰まっています

これは可能ですか、それとも別の角度から問題にアプローチする必要がありますか?

4

1 に答える 1