2017-10-17 6 views
1

テンプレート内のデータを取得する原則を理解するのに問題があります。私は非常によくシェルからそれを行う方法を理解しています。しかし、私は常にクラスベースのビューを使用してそれを行う方法をブロックします。 私は単純なビューがありますので、私のテンプレートで、私は簡単に {{project.name}}または{{}} project.team_iddjangoテンプレートのデータを取得する

ようなモデルプロジェクトからしかし、私の場合、データを取得

class ProjectDetailView(generic.DetailView, LoginRequiredMixin): 
    #import pdb; pdb.set_trace() 
    model = Project 
    template_name = 'project_details.html' 

を私のプロジェクトに他のモデルの詳細データを表示したいのですが、どうすればいいですか? すべてのチームメンバーのリストを表示したいとしますか?ここ

は私のモデルです:

class Team(models.Model): 
    team_name = models.CharField(max_length=100, default = '') 
    team_hr_admin = models.ForeignKey(MyUser, blank=True, null=True) 
    members = models.ManyToManyField(MyUser, related_name="members") 

    def __str__(self): 
     return self.team_name 


class Project(models.Model): 
    name = models.CharField(max_length=250) 
    team_id = models.ForeignKey(Team, blank=True, null=True) 
    project_hr_admin = models.ForeignKey('registration.MyUser', blank=True, null=True) 
    candidat_answers = models.ManyToManyField('survey.response') 
+0

モデルプロジェクトの特定のオブジェクトをコンテキストに渡す必要がありますか?あなたがチームモデル – MohitC

答えて

1

通常は、テンプレートにクエリを行いません。それがクラスベースであろうと関数ベースであろうと、ビュー内でそれらを実行します。によってコンテキストに追加することができるようにリンクされていない

Team: {{ project.team_id.name }} 
Members: 
{% for member in project.team_id.members.all %} 
    {{ member.name }} 
{% endfor %} 

データ:データは関係を介して連結されているので、この特定のケースで

しかし、あなたはテンプレートでそれらの関係を追跡することができますビューで get_context_dataメソッドをオーバーライドします。

+1

のためにできるのと同じやり方こんにちはdaniel okモデルがリンクであれば、私はちょうどその関係に従います。リンクされていなければ、私はそれを抽出してコンテキストに入れてget_context_dataを使います。 OKそれはあなたを得た;) – Ben2pop

0

あなたはこのように、あなたのコンテキストに余分なデータを追加する必要があります:

class ProjectDetailView(generic.DetailView, LoginRequiredMixin): 
    model = Project 
    template_name = 'project_details.html' 

    def get_context_data(self, **kwargs): 
     # Call the base implementation first to get a context 
     context = super(ProjectDetailView, self).get_context_data(**kwargs) 
     # Add in a QuerySet of all the team members 
     context['members'] = self.get_object().team_id.members.all() 
     return context 

次に、あなたのテンプレートで、あなたがこのようにそれらを表示することができるようになります:

{% for member in members %} 
    {{ member.name }} # or any other attribute 
{% endfor %} 

はそれが役に立てば幸い!

関連する問題