2011-04-07 3 views
0

私はappという名前のDjangoアプリケーションがあります。その中にmodels.pyという名前のデータで定義されたモデルクラスがあります。また、テンプレートディレクトリにhtmlファイルがあります。このファイルには、タイプ、日付などのモデルのフィールドが設定されているいくつかのピックリストがあります。 私が行う必要があるのは、views.pyのフィールドのリストを取得し、ピックリストをそれらのフィールドに設定することです。もう一つは、ユーザーが選択リストの値を選択してクエリを送信した後、モデルのすべてのフィールドの値を表示するテーブルを表示します。だから、基本的に私はユーザーが入力した内容を取得し、入力によって照会し、照会に基づいてモデル内のすべてのフィールドのデータを取得する必要があります。別の2つのフィールドに時間と価値を付けることができます。これらのことはほとんどの場合、views.pyで行うべきです。私は二つのことのために、試してみました何モデルからフィールドデータを取得する方法は?

<form action="" method="post"> 
<select name="type" values="type_data"></select> 
<select name="date" values="date_data"></select> 
<input type="submit" value="Submit"> 
</form> 

は、以下のとおりです:ここ

がHMTLファイル内の選択リストです

1.Toは、ピックリストを移入するためのデータを取得し、私が使用:

objects= data.objects.all() 
type_data=getattr(objects, 'type') 
date_data=getattr(objects, 'date') 

2.Toデータを取得するクエリの後、私が使用:

if request.method == 'POST': 
    … 
    mytype = '% r' % request.POST.get['type'] 
    mydate = ' %r ' % request.POST.get['date'] 
    objects2= data.objects2.filter(type=mytype,date=mydate) 
    time=getattr(objects2, 'time') 
    value=getattr(objects2, 'value') 

動作しません。私はこのリンクdjango object get/set fieldを参照していますので、基本的にモデルからフィールドデータを取得するためにこれを使用しています:

何か考えていますか?私は助けてよろしくお願いします。

答えて

1

の機能 - 具体的にはModelChoiceFieldを見てください - この問題を解決します。

モデルのイントロスペクションを行い、フィールドの内容を確認する場合は、model._meta.fieldsを参照してください。

たとえば、次のコードでは、モデルインスタンスinstanceに各フィールドの値を出力します:

for field in instance._meta.fields: 
    print field.attname, '=', getattr(model, field.attname) 
+0

私はこれらのコードを試しましたが、動作しませんでした。それはこの_meta.fieldsの事を認識しているようには思われません – widget

+0

それはいつも私のために働いています... –

1

マテリアライズドとき、あなたのobjects変数は、クエリセットですので、取得するには、「オブジェクトのリスト」であります

objects = data.objects.all() 

type_data = [] 
date_date = [] 

for obj in objects: 
    type_data.append(obj.type) 
    date_date.append(obj.date) 

しかし、私は、ドロップダウンが各値のIDを持つことであるためにあなたが本当に必要なものと仮定し(しかし、私は間違っている可能性があり):オブジェクトのプロパティのリストは、あなたがそれらを反復する必要があり

for obj in objects: 
    type_data.append((obj.pk, obj.type)) 
    date_date.append((obj.pk, obj.date)) 

これはタプルのリストを作成します:あなたが使用できるテンプレートでそう

[(1, 'value1'), (2, 'value2')...] 

<select name="type"> 
    {% for value, name in type_data %} 
     <option value="{{ value }}">{{ name }}</option> 
    {% endfor %} 
</select> 

が、心を持っている、そのDjangoは、このプロセスを簡素化することができます - についてを読んでフォーム。

+0

あなたはオブジェクトのプロパティを取得するためにそれらを反復すべきです。 IDについて、私は実際には今のところそれを必要としません。ユーザーが選択してクエリする値を表示するだけです。今、私はエラーが発生しています: 'instancemethod'オブジェクトはサブスクライブできません。私は、これがモデルのオブジェクトにアクセスする正しい方法であれば、それを考えています。単純に使用するには:objects = data.objects.all() 本当に私のためのオブジェクトを取得していますか? – widget

+0

'data'がクラスの場合... – Jerzyk

+0

私のデータベースのテーブル名に誤りがありました。それはappl_classでなければなりませんが、私は名前としてクラスしか持っていませんでした。 sbは私にそれを指摘しました。 – widget

関連する問題