2017-08-07 74 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'这是唯一的一个 –