【问题标题】:django listview filter & get value templatesdjango listview 过滤并获取值模板
【发布时间】:2020-08-09 04:41:37
【问题描述】:

我在库存模板中列出了今天注册的事件,我想显示事件的总评分(今天注册)。

我通过将分数的总和设为函数从模板中调用它,但它不可见。有人知道吗?

views.py

class CalendarView(generic.ListView):
   model = Event
   template_name = 'cal/calendar.html'

def get_queryset(self, **kwargs):
    return Event.objects.all().filter(start_time__date=date.today())

def filter_event_rating_sum(self):
    filtered_event = Event.objects.all().filter(start_time__date=date.today())
    sum_rating = 0
    for each_event in filtered_event:
        sum_rating += each_event.rating
    return sum_rating

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    d = get_date(self.request.GET.get('month', None))
    cal = Calendar(d.year, d.month)
    # issue self.request.user 
    html_cal = cal.formatmonth(self.request.user, withyear=True)
    context['calendar'] = mark_safe(html_cal)
    context['prev_month'] = prev_month(d)
    context['next_month'] = next_month(d)
    return context

templates.html

    <p class="today">Today</p>

    {% for list in object_list %}
        <div class="today_list_item">
            <span>{{ list.title }}</span>
            <span class="each_rating">{{ list.rating }}</span>

        </div>

    {% endfor %}

    <p class="total">TOTAL</p>

    {{ sum_rating }}
</div>

models.py

class Event(models.Model):
    title = models.CharField(max_length=200)
    start_time = models.DateTimeField(default = timezone.now, blank = True)
    # default = timezone.now,
    profile=models.ForeignKey(Profile, related_name='event',on_delete=models.CASCADE)
    rating = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)], blank=True, default='enter your value')

    def __str__(self):
        return '{}/ {}/ {}'.format(self.id, self.title, self.start_time, self.rating)

【问题讨论】:

  • 您需要修复代码中的缩进,或者可能就像您的问题一样?

标签: django listview filter


【解决方案1】:

您只能使用 get_context_data 函数返回的字典中的那些变量。像这样在 get_context_data 函数中添加这段代码

queryset['sum_rating'] = self.filter_event_rating_sum()

【讨论】:

  • 谢谢。我像那样更改了视图文件,并在模板中写了

    {{ sum_rating }}

    但数字没有显示..
  • 是定义在类内或类外的函数。打印 get_context_data 函数中的任何内容并检查它是否被调用。
  • 感谢您的评论。但它没有被调用。我想是因为我有另一个显示日历的 get_context_data。所以它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2012-06-03
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多