2017-03-21 17 views
0

IndexView内で2つ以上のクエリを実行しようとしていて、テンプレート内に結果を表示しようとしています。しかし、私はそれが言ってerroringなしget_context_dataEntry.objects.filter(date=today_date)Savings.objects.filter(id=1)の両方を追加するように見えることはできません。クラスベースビューで2つのモデルを照会してください

リバースの引数を持つ「エントリ更新」の「(」「」)とキーワード 引数「{} ' 見つかりません。 1つのパターン(s)は試してみました: [ 'トラッカー/エントリー/更新/(?P [0-9] +)/ $']を

どのように私は1つのビューに2つの異なるモデルからデータを引っ張って行くでしょう?具体的には、どのようにすればこのようなものを得ることができますか:

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 

ご協力いただきありがとうございます!

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}) 

編集:私はこの記事に詳細を追加しました。

+0

どのようなエラーが表示されますか?これは良いアプローチなので。新しいクエリーセットの結果をコンテキストに追加します。 object_listにはget_queryset()メソッドの結果があります。 – Wilfried

+0

エラーは、ほとんどの場合、 'get_queryset'または' get_context_data'がすでに定義されていると述べています。その結果、再度使用することはできません。しかし、私がどのようにするかわからないのは、単一の 'get_queryset'または' get_context_data'関数内で複数のクエリを結合することです。私がしようとしているのは、 'Entry.objects.filter(date = today_date)'と 'Savings.objects.filter(id = 1)'からデータを取り出し、両方の結果をテンプレートに表示することです。 – grigs

答えて

0

1ページに2つのクエリセットの結果を得ることのあなたの問題について:あなたのテンプレートで今

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 

、あなたはこの2つのクエリセットへのアクセスもあります。 {{ entry_qs }}{{ savings_qs }}

あなたのエラー

リバースについての引数を持つ 'エントリ更新' の '(' '')とキーワード 引数 '{}' が見つかりません。 1つのパターン(s)は試してみました: [ '(?P [0-9] +)トラッカー/エントリー/更新//$']

私はあなたのテンプレートで悪いテンプレートurlを書くとします。あなたは引数なしでURL entry-updateを使用します。だからDjangoはこのURLを逆転できません。これは存在しないからです。このURLに引数を渡す必要があります

{% url 'entry-update' pk %} # replace pk by primary key of the correct object 
+0

それは動作します!今私はそれを見ることが完全に意味をなさない。ありがとうございました! – grigs

+0

お気軽にお手伝いします – Wilfried

関連する問題