2012-02-09 7 views
5

私は、クエリーに作用し、テーブルの適切なセルに配置しなければならないオブジェクトのリストを取得するように定義されたモデルを持っています。ここにコードの関連部分があります。私はすべてのオブジェクトを検索し、Xによって定義された行と列と2次元テーブルに置く場合は、このDBからテーブルにクエリーセットをレンダリングする方法テンプレート-Django

class Location(models.Model): 
    x=models.IntegerField(null=True) 
    y=models.IntegerField(null=True) 
    z=models.CharField(max_length=5,null=True) 

    def __unicode__(self): 
     return self.z 

、そのY object.If特定の(X、Y)にはオブジェクトが存在しませんその特定のスロットはテーブルの中に空白で表示する必要があります。これは私がこれらの目的を達成するために書いたビューです。ここで

def gettable(request): 
    events=[] 
    for xdim in xrange(3): 
     xe=[] 
     for ydim in xrange(3): 
      object=[0] 
      object.append(Location.objects.filter(x=xdim,y=ydim)) 
      xe.append(object[-1]) 
      events.append(xe) 
    return render(request, 'scheduler/table.html', {'events':events}) 

は、私がここに複数の問題に取り組むために持っているコード

<table border="1"> 
    <th>Header 0</th> 
    <th>Header 1</th> 
    <th>Header 2</th> 
    {% for event in events %} 
    <tr> 
    {% for x in event %} <td>{{ x }}</td> 
    {% endfor %} 
    </tr> 
    {% endfor %} 
</table> 

のHTML部分です。

1.ビュー用の私のコードは、(私はdjangoがそのようなタスクに取り組むために多くのものを提供しているので、悪いです) y)値を返します。

2. [<Location: 21>]形式で出力されますが、 '21'としてください。

3.与えられた(x、y)のオブジェクトが存在しない空のセルをどのように導入しますか?

4.私のコードを簡単かつ一般的にすることができる他の方法を提案してください。ポイント当たり

答えて

14

コードをシンプルにしたい場合は、アプリケーションdjango-tables2を使用することをお勧めします。このアプローチは、テーブルの生成に関するすべての問題を解決できます。ドキュメント・サイスとして

ジャンゴ-tables2はHTML テーブルにデータのセットを回すのタスクを簡素化します。ページネーションとソートをネイティブサポートしています。 のHTMLテーブルではdjango.formsの機能とは何ですか?例えば

その機能は次のとおりです。

  • は任意のiterableは、データ・ソースすることができますが、Djangoのクエリセットのための特別なサポートが含まれています。
  • 組み込みUIはJavaScriptに依存しません。
  • Djangoモデルに基づく自動テーブル生成をサポートしています。
  • サブクラス化によってカスタム列の機能をサポートします。
  • ページネーション。
  • カラムベースのテーブルソート。
  • HTMLへの簡単なレンダリングを可能にするテンプレートタグ。
  • Django 1.3で使用する一般的なビューのミックスイン。

テーブルを作成するのと同じくらい簡単です:

import django_tables2 as tables 

class SimpleTable(tables.Table): 
    class Meta: 
     model = Simple 

これは、ビューで使用されます:

テンプレートで
def simple_list(request): 
    queryset = Simple.objects.all() 
    table = SimpleTable(queryset) 
    return render_to_response("simple_list.html", {"table": table}, 
           context_instance=RequestContext(request)) 

そして最後に:

{% load django_tables2 %} 
{% render_table table %} 

この例では、最も単純なケースの1つである を示していますが、d jango-tables2はさらに多くのことができます!詳細については、documentationの を確認してください。

クエリセットの代わりに辞書を使用することもできます。

1

  1. IMOカスタムフィルタやタグを作成し、クエリセットを使用して逃げることができます。
  2. 希望する商品を返品するには、__unicode__(または__string__)の方法を定義する必要があります。
  3. 値が空であるか、項目が存在しない場合、レンダリングされた結果も空になります。

HTH

1

点2については、各セルにリストではなく、単一のオブジェクトを与えている、{{X.0}}はあなたに正しい値を与える必要がありますが、それはまた、あなたがしている示唆あなたのビューロジックで間違っている。

関連する問題