2017-08-07 77 views
0

我有一個特定頻道的DetailView。這裏列出了該頻道的所有數據。有一個名爲'ExecutionLog'的模型類。目前,除了來自'ExecutionLog'模型類的數據之外,所有其他數據都顯示在詳細視圖中。從Django中的模型類獲取數據

該課程是在'基於類的視圖',這對我來說是全新的。我無法理解真正發生了什麼。

的DetailView類視圖:

class ChannelDetailView(LoginRequiredMixin, SuperAdminMixin, ChannelView, DetailView): 
    def get_context_data(self, *args, **kwargs): 
     context = super(ChannelDetailView, self).get_context_data(*args, **kwargs) 

     if 'date' in self.request.GET: 
      d = self.request.GET['date'] 
      date = datetime.datetime.strptime(d, "%Y-%m-%d").date() 
     else: 
      date = datetime.date.today() 
     context['activePage'] = {'tree': 'ChannelPage', 'branch': 'index'} 
     datas = get_datas_hourly(True, self.object.id, date) 
     matches_data = get_datas_hourly(False,self.object.id, date) 
     context['date'] = date 
     context['labels'] = datas.keys() 
     context['values'] = datas.values() 
     context['matches_labels'] = matches_data.keys() 
     context['matches_values'] = matches_data.values() 
     return context 

模型ExecutionLog:

class ExecutionLog(models.Model): 
    ACTION_TYPES = (
     (0, 'START'), 
     (1, 'STOP'), 
     (2, 'ASSIGNED'), 
     (3, 'ERROR'), 
     (4, 'OTHERS'), 
    ) 
    type = models.IntegerField(default=0, choices=ACTION_TYPES) 
    title = models.CharField(max_length=255) 
    description = models.TextField(max_length=255, blank=True, null=True) 
    date = models.DateTimeField(auto_now_add=True) 
    execution = models.ForeignKey(Execution, related_name="execution_logs") 

    class Meta: 
     ordering = ['-date'] 

我想要得到的特定頻道的DetailView頁面的ExecutionLog數據。

+0

那麼,究竟是什麼是你的問題?你遇到了什麼錯誤? – zaidfazil

+0

我不明白如何實際從模型類中獲取數據並通過'ChannelDetailView'類發送它。 –

+1

您是否閱讀過https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-display/? –

回答

1

您可能需要重寫你的get()方法,

def get(self, request, *args, **kwargs): 
    self.object = self.get_object() 
    context = self.get_context_data(object=self.object) 
    return self.render_to_response(context) 

你可以編輯視圖爲您的要求。另外,在任何事情之前,先看看DetailView的定義。

編輯

def get_context_data(self, *args, **kwargs): 
    context = super(ChannelDetailView, self).get_context_data(*args, **kwargs) 

    if 'date' in self.request.GET: 
     d = self.request.GET['date'] 
     date = datetime.datetime.strptime(d, "%Y-%m-%d").date() 
    else: 
     date = datetime.date.today() 
    context['activePage'] = {'tree': 'ChannelPage', 'branch': 'index'} 
    datas = get_datas_hourly(True, self.object.id, date) 
    matches_data = get_datas_hourly(False,self.object.id, date) 
    context['date'] = date 
    context['labels'] = datas.keys() 
    context['values'] = datas.values() 
    context['matches_labels'] = matches_data.keys() 
    context['matches_values'] = matches_data.values() 
    context['executionLogs'] = ExecutionLog.objects.all() 
    #^^^^^^^^^^^ You can access the execution logs in your template. 
    return context 

您必須通過查詢集迭代和訪問屬性逐一模板,像

{% for item in execution_log %} 
    {{ item.type }} 
    {{ item.title }} 
    {{ item.description }} 
    ..... 
{% endfor %} 
+0

我只想在視圖類中獲取'ExecutionLog'數據。我應該這樣做。其他任何事情都可以正常工作 –

+0

在你的問題中的觀點,是全部還是在視圖中還有更多? – zaidfazil

+0

還有其他意見。但對於'ChannelDetailView'這是唯一的一個 –