2017-10-17 69 views
1

我無法理解檢索模板中數據的原理。我非常瞭解如何從殼牌公司做到這一點。但我總是阻止如何使用基於類的視圖來完成它。 我有一個簡單的觀點:在Django模板上檢索數據

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

所以在我的模板我輕鬆地檢索從模型項目數據,如 {{project.name}}或{{project.team_id}}

但如果我我想在我的項目中顯示來自其他模型的詳細數據,我該怎麼做? 假設我想顯示所有團隊成員的列表?

這裏是我的模型:

模板
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

高你好,所以如果模型是鏈接我只是按照關係,如果它沒有鏈接,我使用get_context_data來提取它並把它放在上下文中。 OK知道你thx;) – 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 %} 

希望它能幫助!