2016-06-27 7 views
1

私はいくつかのデータベーステーブルを外部キーでリンクしています(基本的な例をここで許してください、私は今、開発envのコピー/貼り付けに問題があります) 。リンクされたデータベースの結果を単一のHTMLテーブルに表示

# models.py 
class Task(models.Model): 
    details = models.ForeignKey(Details) 
    task = models.CharField(max_length=1024, null=false) 

class Activity(models.Model): 
    task = models.ForeignKey(Task) 
    activity = models.CharField(max_length=1024) 

class Resources(models.Model): 
    activity = models.ForeignKey(Activity, null=false) 
    resources = models.CharField (max_length=1024) 

これらの結果を1つのテーブルに表示する必要があります。 Activity1

  • リソース1
  • リソース2

  • タスク1
    • :タスクは何の活動を持つことができないことに注意してくださいとアクティビティはたとえばなど、すべてのリソースを持っていない可能性があります
    • アクティビティ2
  • Task2の
    • ...等...私は多分に存在し得るすべてのフィールドが含まれている私のforms.pyでテーブルを作成しているこれまでのところ

データベース結果。だから、:

# forms.py 
class ViewTable(tables.Table): 
    task = tables.Column(default=' ') 
    activity = tables.Column(default=' ') 
    resource = tables.Column(default=' ') 

私は、正しい順序で一緒に結果をリンクして、テンプレートにそれらをレンダリングするitertools.chainを使用していました。私はここで行き止まりで午前:

# views.py 
table = None 
for task in tasks: 
    if table: 
     table = list(chain(table, task) 
    else: 
     table = task 

    for activity in Activities.objects.filter(tasks=task): 
     table = list(chain(table, activity)) 
     for resource in Resources.objects.filter(activity=activity): 
      table = list(chain(table, resource)) 

return render(request, 'table.html', {'table', table, }) 


# table.html 
<table> 
    <tr> 
     <th>Tasks</th> 
     <th>Activity</th> 
     <th>Resources</th> 
    </tr> 
{% for item in table %} 
    <tr> 
     <th>{{ item.task }}</th> 
     <th>{{ item.activity }}</th> 
     <th>{{ item.resource }}</th> 
    </tr> 
{% endfor %} 
</table> 

私は1つのタスクのみ(無活動またはリソース)を持っている場合、これが原因で動作しません。そのオブジェクトは、反復可能ではないので、ときに私、私はエラーを取得しますそれをテンプレートでレンダリングしてみてください。

しかし全体として、私はこれがやや遅いやり方であると感じています。私はより良い方法を考え出すのに問題があります。修正や完全に代替の推奨事項は大歓迎です!私は、オブジェクトを反復処理し、リストにそれらの項目のそれぞれを加えることができることを認識していなかった

 
Tasks  Activities  Resources 
------------------------------------- 
task1 
      activity1 
         resource1 
         resource2 
      activity2 
task2 
+0

この場合にdjango-tables2を使用する理由がわかりません。また、コードを表示する際にdjango-tables2をまったく使用しないようです。 それ以外では、何かが反復可能でないというエラーが発生した場合、それを反復しようとする前にチェックする必要があります。 – Jieter

+0

あなたが正しいです、私は 'tables.Table'が' django-tables2'の一部であることに気付きませんでした。その部分は必要ありません。私の質問は、私が「総合的な目標」に掲示したようなものを考え出すことでした。そのオブジェクトが(私が持っているコードを修正する)反復可能であるか、まったく異なる解決策であれ、私はすべての耳です。 –

+0

ええ、あなたの例を見ると、複数の構文エラーがあります( 'false'と' False'、括弧がありません)。完全なdjangoプロジェクトを提供する必要はありませんが、コードは構文エラーなしで実行する必要があります。ビューは完了する必要があります。外部依存関係のないモデルを作成することができます... – Jieter

答えて

0

全体的な目標は次のように表示される何かを得ることです。

など、私はちょうど私のテンプレートとアクセス{{ all.activity_num }}allをドロップすることができるよ。そこから

all = [] 

task = Tasks.objects.get(id=1) 
all.append(task) 

activities = Activities.objects.filter(task_id=task) 
for activity in activities: 
    all.append(activity) 
    resources = Resources.objects.filter(activity_id=activity) 
    for resource in resources: 
     all.append(resource) 

私はいくつかのより多くの読み取りを行う必要があると思います:私はそうのような自分自身の問題を解決することができましたオブジェクトの構築方法についてありがとう!

関連する問題