0

私は Django が初めてで、Python もやや初心者です。クエリセットをループして各モデルに変数を設定する慣用的な方法を見つけようとしています。基本的に、私のモデルは API の値に依存しており、モデル メソッドはその属性の 1 つにこの API 値を掛けて、最新の正しい値を取得する必要があります。

現時点では、私はビューでそれを行っていますが、うまくいきますが、それが私が望むものを達成する正しい方法であるかどうかはわかりません. このループを別の場所で複製する必要があります。

複数の場所で使用できるように、ループ ロジックをクエリセット メソッドにカプセル化する方法はありますか?

注: 各モデル インスタンスに設定している変数は通常の属性であり、db には保存されません。その変数を保存するのではなく、設定できるようにする必要があります。

私はこのatmを持っています(私はdjango-rest-frameworkを使用しています):

class FooViewSet(viewsets.ModelViewSet):
    model = Foo
    serializer_class = FooSerializer

    bar = # some call to an api

    def get_queryset(self):
        # Dynamically set the bar variable on each instance!
        foos = Foo.objects.filter(baz__pk=1).order_by('date')
        for item in foos:
            item.needs_bar = self.bar

        return items

私はそのようなものが良いと思います:

def get_queryset(self):
    bar = # some call to an api
    # Dynamically set the bar variable on each instance!
    return Foo.objects.filter(baz__pk=1).order_by('date').set_bar(bar)

私は、API ヒットをコントローラーに入れ、モデルのインスタンスに注入する必要があると考えていますが、これを行う方法がわかりません。私はクエリセットとマネージャーを見回してきましたが、それを理解することも、私が望むものを達成するための最良の方法であるかどうかを判断することもできません.

これをdjangoでモデル化する正しい方法を誰かが提案できますか?

ありがとう。

4

1 に答える 1