2

ユーザーがドロップダウン メニューからオプションを選択して送信すると、データが返されるビューを作成しようとしています。具体的には、データベース内のモデルから選択し、そのクラスのすべてのインスタンスを返します。django-tables2 を使用してデータを出力し、並べ替え可能にしていますが、これが私のこだわりです。

Views.py

def output_form(request):
    results = None
    if request.GET.get('browse'):
        selection = request.GET.get('browse')

        class ModelTable(tables.Table):
            class Meta:
                model = selection

        results = ModelTable(selection.objects.all())
        RequestConfig(request, paginate={"per_page": 3}).configure(results)

    return render(request, 'projectdb/output.html', {
        'results': results,
})

HTML

<form method="GET">

    <select name="browse">

        <option>Model1</option>

        <option>Model2</option>

    </select>

    <input type="submit" value="Submit" />

</form><br/><br/>

    {% if results != None %}
        {% render_table results %}
    {% endif %}

スローされるエラーは、タイトルのとおりです。

「unicode」オブジェクトには属性「_meta」がありません

「選択」ユニコードを文字列に変換しようとしましたが、基本的に同じエラーがスローされます (str には属性 _meta がありません)。

どんな助けにもとても感謝しています。

編集:明確にするために、私が達成しようとしていること:

ユーザーがドロップダウンからモデルを選択 ---> 選択したモデルが何らかの形でテーブルに渡される ---> テーブルがインスタンス化され、選択したモデルのデータとともにドロップダウンの下のページに返される

4

2 に答える 2

1

model属性は、django モデル クラスを参照する必要があります。

ただし、関数内では、 :オブジェクトoutput_formselection参照します。request.GET.get('browse')str

class ModelTable(tables.Table):
    class Meta:
        model = selection # <----

modelモデル クラスを正しく参照するように属性を変更します。

ModelTableところで、ビュー関数からクラス定義を抽出します。

于 2014-03-04T03:11:52.650 に答える
0

おそらく、あなたが望むのはselection、文字列からモデル クラスに変換することです。これを行うには、次のdjango.db.models.get_model関数を使用します。

selected_model = get_model('myapp', 選択)

私見、あなたが行ったようにテーブルクラスを動的に定義しても、読みやすさは損なわれません。

于 2014-03-04T17:39:07.870 に答える