2017-08-07 7 views
0

Ich habe eine Detailansicht eines bestimmten Kanals. Alle Daten des Kanals sind hier aufgelistet. Es gibt eine Modellklasse namens 'ExecutionLog'. Derzeit werden alle anderen Daten in der Detailansicht angezeigt, mit Ausnahme der Daten aus der Modellklasse 'ExecutionLog'.Erhalte Daten von der Modellklasse in Django

Die Klasse ist in "Klassenbasierte Ansichten", die für mich völlig neu ist. Ich konnte nicht verstehen, was wirklich vor sich geht.

Detailview Klasse Ansicht:

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 

Modell für 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'] 

Ich möchte, dass die Detailseite ist die ExecutionLog Daten des Kanals erhalten.

+0

Also, was ist eigentlich dein Problem? Welchen Fehler bekommst du? – zaidfazil

+0

Ich habe nicht verstanden, wie man die Daten tatsächlich aus der Modellklasse holt und über die 'ChannelDetailView'-Klasse sendet. –

+1

hast du https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-display/ gelesen? –

Antwort

1

Möglicherweise müssen Sie Ihre get() Methode außer Kraft zu setzen,

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) 

Sie können die Ansicht wie Ihre Anforderungen bearbeiten. Werfen Sie auch einen Blick auf die Definition von DetailView vor allem.

EDIT:

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 

Sie haben durch die queryset laufen und die Attribute einer nach dem anderen in der Vorlage zugreifen, wie

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

Ich möchte nur die 'ExecutionLog' Daten hier in der View-Klasse erhalten. Soll ich das tun? Jede andere Sache funktioniert gut –

+0

Der Blick in Ihre Frage, ist alles oder gibt es etwas mehr in der Ansicht? – zaidfazil

+0

Es gibt andere Ansichten. Aber für "ChannelDetailView" ist dies die einzige –

Verwandte Themen