0

モデル:

class Program (models.Model):
    name = models.CharField(max_length=70)
    add = models.DateTimeField(auto_now=True)

class Subject (models.Model):
    s_name = models.CharField(max_length=50)
    program = models.ForeignKey(Program)
    s_add = models.DateTimeField(auto_now=True)

データベースには、次のような同じ行がすでに追加されています。

app_programテーブル内:

 id | name      |  add
 1  | Program1  |  some date
 2  | Program2  |  some date
 3  | Program3  |  some date

app_subject:

 id | s_name    | program | add
 1  | subject1  | 1       | some date
 2  | subject2  | 2       | some date
 3  | subject3  | 1       | some date
 4  | subject4  | 2       | some date
 5  | subject5  | 3       | some date

テンプレートで、次のようなforループでデータを表示したいと思います。

 1. Program1
     1. subject1
     2. subject3

 2. Program2
     1. subject2
     2. subject4

 3. Program3
     1. subject5

ビューとテンプレートに何を入れるべきかわかりません。私はもう試した:

 from app.models import Program, Subject
    program_all = Program.objects.all()
    subject_all = Subject.objects.all()

次に、コンテキスト変数などとしてテンプレートに渡します。これをテンプレートで使用する場合:

 {% for field in program_all %}
      {{ forloop.counter }}. {{ field.name }}
      {% for field2 in subject_all %}
      {{ field2.s_name }}
      {% endfor %}
 {% endfor %}

既存のすべてのサブジェクトを含むすべてのプログラムを表示するだけで、プログラムに接続されているサブジェクトのみを表示したいと思います。

4

1 に答える 1

2

あなたはこれを必要とします:

{% for field in program_all %}
  {{ forloop.counter }}.{{ field.name }}
  {% for subject in field.subject_set.all %}
     {{ forloop.counter }}. {{ subject.s_name }}
  {% endfor %}
{% endfor %}

モデルに関係ができたら、それを逆方向にたどることもできます。

この場合、それぞれについてprogramsubject_setそのプログラムに関連するすべての主題があります。あなたのビューまたはdjangoシェルでは、次のようになります。

for p in Program.objects.all():
   print 'The program {} has {} subjects:'.format(p,p.subject_set.count())
   for subject in p.subject_set.all():
       print subject
于 2012-12-31T20:10:31.757 に答える