rne*_*ius 11 python django listview get django-views
我已经阅读了关于动态过滤 ListView 的官方文档,但我仍然对如何实际使用它感到困惑.
我目前有一个简单的模型,我们称之为Scholarship:
class Scholarship(models.Model):
title = models.CharField(max_length=255)
submitted_date = models.DateField(auto_now=True, verbose_name='Date Submitted')
EXPERIENCE_LEVEL_CHOICES = (
('A', 'Any'),
('S', 'Student'),
('G', 'Graduate')
)
experience_level = models.CharField(max_length=1, choices=EXPERIENCE_LEVEL_CHOICES, default='A')
Run Code Online (Sandbox Code Playgroud)
我有一个页面,我正在使用ListView显示所有这些奖学金:
views.py
from django.views.generic import ListView
from .models import Scholarship
class ScholarshipDirectoryView(ListView):
model = Scholarship
template_name = 'scholarship-directory.html'
Run Code Online (Sandbox Code Playgroud)
urls.py
from django.conf.urls import patterns, url
from .views import ScholarshipDirectoryView
urlpatterns = patterns('',
url(r'^$', ScholarshipDirectoryView.as_view(), name='scholarship_directory'),
)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在网站的主页上生成链接,该链接将返回此ListView的过滤版本.例如,如果有人点击"为研究生提供奖学金"链接,则只会显示奖学金experience_level='G'.
通过shell - >返回此查询集没有问题 Scholarship.objects.filter(experience_level__exact='G')
我只是不确定如何通过下拉列表或URL动态过滤ListView.不想使用插件,而是了解动态查询/过滤在Django中的工作原理.
Ser*_*eim 15
首先,您需要更改urls.py,以便将经验作为参数传递.像这样的东西:
urlpatterns = patterns('',
url(r'^(?P<exp>[ASG])$', ScholarshipDirectoryView.as_view(), name='scholarship_directory'),
)
(如果/ A或/ S或/ G未通过,以上将返回404)
现在,在 kwargsCBV的属性中,我们将有一个命名的kwarg exp,该get_queryset方法可以根据经验级别进行过滤.
class ScholarshipDirectoryView(ListView):
model = Scholarship
template_name = 'scholarship-directory.html'
def get_queryset(self):
qs = super(ScholarshipDirectoryView, self).get_queryset()
return qs.filter(experience_level__exact=self.kwargs['exp'])
| 归档时间: |
|
| 查看次数: |
8242 次 |
| 最近记录: |