2017-03-21 3 views
0

Ich versuche, mehr als zwei Abfragen innerhalb meiner IndexView auszuführen, und zeige die Ergebnisse in meiner Vorlage an. Allerdings kann ich nicht beide Entry.objects.filter(date=today_date) und Savings.objects.filter(id=1)-get_context_data hinzuzufügen scheinen, ohne es erroring heraus zu sagen:Abfrage von zwei Modellen in der klassenbasierten Ansicht

umge für ‚Entry-Update‘ mit den Argumenten ‚(‘ ‚)‘ und Stichwort Argumente ‚{} ' nicht gefunden. 1 Muster (n) versucht: [ 'Tracker/entry/update/(? P [0-9] +)/$']

Wie würde ich mich über Daten von zwei verschiedenen Modellen in einer Ansicht ziehen ?

def get_context_data(self, **kwargs): 
    et = super(IndexView, self).get_context_data(**kwargs) 
    et['filter'] = Entry.objects.filter(date=today_date), (Savings.objects.filter(id=1)) 
    return et 

Vielen Dank im Voraus für Ihre Hilfe: Genauer gesagt, wie würde ich so etwas wie dies an der Arbeit!

views.py

class IndexView(generic.ListView): 
    template_name = 'argent/index.html' 
    context_object_name = 'object_list' 

    def get_queryset(self): 
     return Entry.objects.all() 

    def get_context_data(self, **kwargs): 
     et = super(IndexView, self).get_context_data(**kwargs) 
     et['filter'] = Entry.objects.filter(date=today_date) 

     return et 

models.py

class Entry(models.Model): 
    date = models.DateField(blank=True, null=True,) 
    euros = models.CharField(max_length=500, blank=True, null=True) 
    comments = models.CharField(max_length=900, blank=True, null=True) 
    euros_sum = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 
    xrate = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 
    dollars_sum = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 
    daily_savings_dollars = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 
    daily_savings = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 

    def get_absolute_url(self): 
     return reverse('argent:detail', kwargs={'pk': self.pk}) 

    def item_date(self): 
     row_title = self.date 
     return row_title 


class Savings(models.Model): 
    total_spent_euros = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 
    total_spent_dollars = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 
    total_savings = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) 

    def get_absolute_url(self): 
     return reverse('argent:detail', kwargs={'pk': self.pk}) 

EDIT: Ich ausführlicher zu diesem Beitrag hinzugefügt.

+0

Welchen Fehler erhalten Sie? Weil das der gute Ansatz ist. Sie fügen in Ihrem Kontext das neue Abfrageergebnis hinzu. Und in object_list haben Sie das Ergebnis der Methode get_queryset(). – Wilfried

+0

Die Fehler geben meistens an, dass 'get_queryset' oder' get_context_data' bereits definiert sind und daher nicht wieder verwendet werden können, was sinnvoll ist. Aber was ich nicht herausfinden kann, ist das Verbinden mehrerer Abfragen innerhalb einer einzelnen 'get_queryset'- oder' get_context_data'-Funktion. Ich versuche, Daten aus 'Entry.objects.filter (date = today_date)' und auch aus 'Savings.objects.filter (id = 1)' zu ziehen und dann beide Ergebnisse in der Vorlage anzuzeigen. – grigs

Antwort

0

über Ihr Problem des Erhaltens zwei queryset Ergebnisses auf einer Seite:

def get_context_data(self, **kwargs): 
    et = super(IndexView, self).get_context_data(**kwargs) 
    et['entry_qs'] = Entry.objects.filter(date=today_date) 
    et['savings_qs'] = Savings.objects.filter(id=1) 
    return et 

Jetzt in Ihrer Vorlage haben Sie Zugang zu diesen beiden querysets. {{ entry_qs }} und {{ savings_qs }}

über Ihre Fehler

umge für 'Entry-Update' mit den Argumenten '(' ')' und Stichwort Argumente '{}' nicht gefunden. 1 Muster (n) versucht: [ 'Tracker/entry/update/(? P [0-9] +)/$']

Ich nehme an, Sie eine schlechte Vorlage url in Ihrer Vorlage zu schreiben. Sie verwenden die URL entry-update ohne ein Argument. Also kann Django diese URL nicht rückgängig machen. Weil das nicht existiert. Sie müssen ein Argument zu dieser URL übergeben

+0

Das funktioniert! Es macht absolut Sinn, jetzt, wo ich es sehe. Vielen Dank! – grigs

+0

Froh, Ihnen zu helfen – Wilfried

Verwandte Themen