Django 在基于类的视图中查询两个模型

Django 在基于类的视图中查询两个模型,django,python-3.x,django-views,django-queryset,Django,Python 3.x,Django Views,Django Queryset,我试图在我的IndexView中运行两个以上的查询,并在我的模板中显示结果。但是,我似乎无法将Entry.objects.filter(date=today\u date)和Savings.objects.filter(id=1)添加到get\u context\u data中,而不会出现以下错误: 对于参数为“(“”,)”和关键字的“条目更新”,则相反 找不到参数“{}”。尝试了1个模式: ['tracker/entry/update/(?P[0-9]+)/$'] 如何将两个不同模型的数据拉入

我试图在我的
IndexView
中运行两个以上的查询,并在我的模板中显示结果。但是,我似乎无法将
Entry.objects.filter(date=today\u date)
Savings.objects.filter(id=1)
添加到
get\u context\u data
中,而不会出现以下错误:

对于参数为“(“”,)”和关键字的“条目更新”,则相反 找不到参数“{}”。尝试了1个模式: ['tracker/entry/update/(?P[0-9]+)/$']

如何将两个不同模型的数据拉入一个视图?更具体地说,我如何让这样的东西发挥作用:

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
提前感谢您的帮助

视图.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
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})
型号.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
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})

编辑:我在这篇文章中添加了更多细节。

关于在一页中获得两个查询集结果的问题:

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
现在在模板中,您可以访问这两个查询集。
{{entry}
{{savings}}

关于你的错误

对于参数为“(“”,)”和关键字的“条目更新”,则相反 找不到参数“{}”。尝试了1个模式: ['tracker/entry/update/(?P[0-9]+)/$']

我想您在模板中编写了一个错误的模板
url
。使用url
entry update
时不带参数。所以Django无法反转此url。因为这根本不存在。您需要将参数传递到此url

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

你有什么错误?因为这是个好办法。在上下文中添加新的queryset结果。在object_list中有get_queryset()方法的结果。错误主要表示
get_queryset
get_context_data
已经定义,因此不能再次使用,这是有意义的。但是我不知道如何在一个
get\u queryset
get\u context\u data
函数中连接多个查询。我试图做的是从
Entry.objects.filter(date=today\u date)
Savings.objects.filter(id=1)
中提取数据,然后在模板中显示这两个结果。这很有效!现在我明白了,这完全有道理。非常感谢。很高兴帮助你