0

モデルとデータベーステーブルをその場で作成するdjangoアプリを作成しました。これは、私が知る限り、私が必要なことを行うための唯一の実行可能な方法です。問題は、動的に作成されたモデルをページ間で渡す方法で発生します。

私はそのようなことをするいくつかの方法を考えることができますが、それらはすべて恐ろしいように聞こえます。私が考えることができる方法は次のとおりです。

  1. views.py内でグローバル変数を使用します。これは恐ろしいハックのようであり、複数の同時ユーザーがいる場合は競合が発生する可能性があります。
  2. URLに参照を渡し、評価ハッカーを使用してモデルを再検索してみてください。モデルが途中でガベージコレクションされる可能性があるため、これはおそらくばかげています。
  3. プレースホルダーアプリを使用します。複数のユーザー間の競合のため、これは悪い考えのようです。
  4. リンクがクリックされたときにモデルを投稿する非表示のフォームを持つ。再び非常にハッキー。

これを行う良い方法はありますか?そうでない場合、これらの方法の1つは他の方法よりも実行可能ですか?

PSそれが私のアプリが既存のデータベースから(json文字列として)データを受信し、それをローカルに(つまりWebサーバー上に)キャッシュして適切なモデルとテーブルをその場で作成するのに役立つ場合。次に、このデータを提示し、メインデータベースに過度の負担をかけることなく、さまざまなフィルタリングとドリルダウンを実行します(各クエリは、数億のデータポイントのデータベースから数百の結果を返すため)。WRT 3、テーブルはクエリとタイムスタンプのハッシュに基づいて名前が付けられますが、プレースホルダーアプリには事前に定義された名前が付けられます。

ありがとう、

jhoyla

追加するために編集:みんなありがとう、私は今この問題を解決しました。私は完全な答えを与えるために両方の答えを一緒に使うことになりました。私は1つしか受け入れることができないので、コンテンツタイプ1つを受け入れるつもりです。残念ながら、私はまだ賛成票を投じるという評判がありません。

その全体の解決策は、

from django.contrib.contenttypes.models import ContentType
view_a(request):
    model = create_model(...)
    request.session['model'] =  ContentType.objects.get_for_model(model)
    ...

view_b(request):
    ctmodel = request.session.get('model', None)
    if not ctmodel:
        return Http404
    model = ctmodel.model_class()
    ...
4

2 に答える 2

2

私の最初の考えは、コンテンツタイプを使用し、URLを介してタイプ/モデル情報を渡すことです。

于 2012-07-11T18:59:55.037 に答える
1

Djangoのセッションフレームワーク使用することもできます。

def view_a(request):
    your_model = request.session.get('your_model', None)

    if type(your_model) == YourModel
        your_model.name = 'something_else'

    request.session['your_model'] = your_model

    ... 

def view_b(request):
    your_model = request.session.get('your_model', None)

    ...

ほとんど何でもsession辞書に保存でき、管理も簡単です。

 del request.session['your_model']
于 2012-07-11T19:14:09.423 に答える