【发布时间】:2017-08-13 07:54:00
【问题描述】:
我试图在我的IndexView 中运行两个以上的查询,并在我的模板中显示结果。但是,我似乎无法将 Entry.objects.filter(date=today_date) 和 Savings.objects.filter(id=1) 添加到 get_context_data 而不出错:
使用参数 '('',)' 和关键字反转 'entry-update' 未找到参数“{}”。尝试了 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
提前感谢您的帮助!
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})
编辑:我在这篇文章中添加了更多细节。
【问题讨论】:
-
你得到什么错误?因为这是好方法。您在上下文中添加新的查询集结果。在 object_list 你有 get_queryset() 方法的结果。
-
错误大多表明
get_queryset或get_context_data已经定义,因此不能再次使用,这是有道理的。但是我不知道如何在一个get_queryset或get_context_data函数中加入多个查询。我要做的是从Entry.objects.filter(date=today_date)和Savings.objects.filter(id=1)中提取数据,然后在模板中显示这两个结果。
标签: django python-3.x django-views django-queryset