将额外内容添加到基于类的视图并对其进行过滤

时间:2017-11-17 14:41:07

标签: django django-templates django-views django-class-based-views django-template-filters

我在我的HTML模板中构建了一个for循环,它几乎正常工作。我遇到的问题是它的列表匹配是一个不同的游览。

我认为解决这个问题的方法是在视图中添加一个过滤器,它基本上会说"只会拉出匹配来完成此游览"这是我在Match.objects.filter()中尝试过的,但它不起作用,我不知道为什么。

class CricketCalendar(generic.ListView):
    template_name="monthly_view/cricket-monthly-view.html"
    context_object_name='cricket_monthly_view'
    queryset = CricketMonthlyView.objects.all()

    def get_context_data(self, **kwargs):
        context = super(CricketCalendar, self).get_context_data(**kwargs)
        context['Tour'] = Tour.objects.all()
        context['Match'] = Match.objects.filter(tour=self.request.Tour)
        return context

我也试过以下内容并且都没有效果:

self.kwargs['pk']
self.kwargs['Tour']

编辑,忘了添加以下内容:

每月查看models.py:

class CricketMonthlyView(models.Model):
    tour = models.ForeignKey('cricket.Tour', on_delete=models.CASCADE, 
related_name='tour_name')
    match_id = models.ForeignKey('cricket.Match', on_delete=models.CASCADE)

和URLs.py:

url(r'^monthly-view/$', monthly_view.CricketCalendar.as_view(), name='cricket-monthly'),

Cricket models.py:

class Tour(models.Model):
    name = models.CharField(max_length=200)
    tier_level = models.ForeignKey('sports.Tier')
    country = CountryField()
class Match(models.Model):
    tour = models.ForeignKey('Tour', on_delete=models.CASCADE)

HTML模板:

{% for match_info in cricket_monthly_view %}
 {% for tour in Tour %}
<ul>
  <li>{{tour.name}}</li>
</ul>
{% for match in Match %}
  <ul>
    <li>{{match.home_team}}</li>
    <li>{{match.away_team}}</li>
  </ul>
{% endfor %}
{% endfor %}

{%endfor%}

1 个答案:

答案 0 :(得分:1)

这是添加断点的好地方。你非常想知道你的上下文和自己的字段。在import pdb; pdb.set_trace()中添加get_context_data,您就可以看到对象上的字段了。使用dir(obj)obj.keys()查看某些内容的所有字段。

或者,如果您可以在上下文变量中访问巡视对象,则可以在模板中使用tour.match_set.all

获取匹配的匹配项

另外,请注意使用大写字母T命名上下文变量Tour,因为这是模型的名称。