私が抱えていた別の問題について説明しますが、解決策は検討する必要があると思います。
以前、データを視覚化するプロジェクトに取り組んでいたときに、すべての視覚化のすべてのデータを格納する非常に大きなテーブルが必要でした。それは大きな問題であることが判明しました。なぜなら、Model.objects.filter(visualization=5)
あまりエレガントでも効率的でもないようなことをしなければならなかったからです。
物事をよりシンプルかつ効率的にするために、動的モデルをその場で作成することになりました。基本的に、その場で db に別のテーブルを作成し、その 1 つの視覚化のデータのみを格納します。私のコードは次のようなものです:
def get_model_class(table_name):
class ModelBase(ModelBase):
def __new__(cls, name, bases, attrs):
name = '{}_{}'.format(name, table_name)
return super(ModelBase, cls).__new__(cls, name, bases, attrs)
class Data(models.Model):
# fields here
__metaclass__ = ModelBase
class Meta(object):
db_table = table_name
return Data
dynamic_model = get_model_class('foo')
これは、クエリをはるかに高速化できるため、私の目的には役立ちましたが、問題に戻ると、各クライアントのデータが外部キーを介して分離されているだけでなく、実際に分離されていることが確認されるため、このようなものが役立つと思いますデシベルで。
このメソッドの使用は非常に簡単ですが、モデルを使用する前に、関数を呼び出してクライアントごとにモデルを取得する必要があります。物事をより効率的にするために、関数呼び出しの結果をキャッシュ/メモ化して、同じことを複数回再計算する必要がないようにすることができます。