Tôi đã đọc Danh sách xem official documentation on dynamically filtering nhưng vẫn còn nhầm lẫn về cách thực sự sử dụng nó.Tự động lọc ListView CBV trong Django 1.7
Tôi hiện có một mô hình đơn giản, chúng ta hãy gọi nó 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')
Tôi có một trang mà tôi đang thể hiện tất cả các học bổng, sử dụng ListView:
views.py
from django.views.generic import ListView
from .models import Scholarship
class ScholarshipDirectoryView(ListView):
model = Scholarship
template_name = 'scholarship-directory.html'
urls.py
from django.conf.urls import patterns, url
from .views import ScholarshipDirectoryView
urlpatterns = patterns('',
url(r'^$', ScholarshipDirectoryView.as_view(), name='scholarship_directory'),
)
Tôi đang cố tạo liên kết trên trang chủ của trang web sẽ trả về phiên bản đã lọc của ListView này. Ví dụ: nếu ai đó nhấp vào liên kết "hiển thị học bổng cho sinh viên sau đại học", chỉ có học bổng với experience_level='G'
mới được hiển thị.
Tôi không có vấn đề trở queryset này qua vỏ ->Scholarship.objects.filter(experience_level__exact='G')
Tôi chỉ không chắc chắn về cách để tự động lọc các ListView qua một thả xuống hoặc URL. Không tìm cách sử dụng plugin, mà là hiểu cách truy vấn/lọc động hoạt động trong Django.
Bạn cũng có thể truy cập kwarg trong 'get_queryset' bằng' self.kwargs'. – SunnySydeUp
Rất tiếc, bạn đã đúng, tôi đã quên mất self.kwargs !! Tôi đã thay đổi câu trả lời của mình để phản ánh điều đó (và nhiều hơn nữa là DRY). cảm ơn ! – Serafeim
@Serafeim bất kỳ ý tưởng làm thế nào để mặc định để queryset nếu kwarg không có trong url? Tôi muốn sử dụng cùng một url conf cho lọc và chưa lọc – villancikos