2

毎回データベースにアクセスすることなく、Model オブジェクトのコレクションから簡単にフィルター処理する方法を探しています。定義上、QuerySet は遅延型であり、常に DB にアクセスします。だから、これを行うことができるものが存在するかどうか疑問に思っています。そうでない場合は、おそらく作成するのに適したライブラリです。

例えば:

all_records = object_set(Record.objects.filter(company=user.company))

object_setQuerySet 内のすべてのオブジェクトを静的データとして収集する仮想関数です。その結果、QuerySet フィルターと同様にフィルターを実行できる「オブジェクト マネージャー」インスタンスが作成されます。これは、データの多次元リストからのデータに基づいて、オブジェクトの作成、更新、および削除を格納する場合に特に役立ちます。

for row in data:
  for col in row:
    # this would not hit the DB. Only filter within the "object_set" in memory.
    all_records.filter(date=col.date, type=col.type, creator=col.user)

これを間違った方法で解決しようとしている可能性があることは理解していますが、それでも、これは Django で使用できる優れたツールになると思います。この問題を解決する Django 内の既存のライブラリまたは機能を知っている人はいますか? 前もって感謝します!

4

3 に答える 3

1

QuerySet の select_related メソッドはあなたが望むものだと思います:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

于 2013-03-21T19:29:07.593 に答える
0

次のプロジェクトの manager.py を確認してください: django-model-utils/.../managers.py

彼がクエリセットをどのように実装したかを示すはずです

def get_query_set(self):
    qs = super(QueryManager, self).get_query_set().filter(self._q)
    if self._order_by is not None:
        return qs.order_by(*self._order_by)
    return qs
于 2013-03-21T20:05:16.697 に答える
-1

長いデータセットがこの質問の動機である場合は、Django プロジェクトで Redis キャッシュを使用してください。

http://unfoldthat.com/2011/09/14/try-redis-instead.html

于 2013-03-22T05:21:29.307 に答える