【发布时间】:2014-06-20 09:37:21
【问题描述】:
我正在尝试为我的结果创建过滤器,该过滤器将从 html 表单中获取多个值。 当前的设置为我提供了诸如 /?language=French&language=German 之类的 URL,但是结果不会显示法语和德语记录,而只会显示法语。此外,添加新的过滤条件,例如 "level" /?language=French&level=Beginner 也不起作用。
有人可以帮我指出正确的方向吗?
谢谢 西科尔
我的表格如下:
RESOURCES_LANGUAGE = (('English', 'English'),
('Spanish', 'Spanish'),
('French', 'French'),
('German', 'German'))
RESOURCES_LEVEL = (('Beginner', 'Beginner'),
('Intermediate', 'Intermediate'),
('Advanced', 'Advanced'))
SORTBY = (('likes', 'Likes'),
('name', 'Name'),
('latest', 'Latest'))
class FiltersAndSortingForm(forms.Form):
language = forms.MultipleChoiceField(required=False, label='Language', widget=forms.CheckboxSelectMultiple, choices=RESOURCES_LANGUAGE)
level = forms.MultipleChoiceField(required=False, label='Level', widget=forms.CheckboxSelectMultiple, choices=RESOURCES_LEVEL)
provider = forms.ModelMultipleChoiceField(queryset=Provider.objects.all().order_by('name'), label='Provider', required=False,)
sortby = forms.MultipleChoiceField(required=False, label='Sort by', widget=forms.CheckboxSelectMultiple, choices=SORTBY)
我的看法:
def resources(request):
if request.GET:
language = request.GET.get('language', '')
level = request.GET.get('level', '')
provider = request.GET.get('provider', '')
sortby = request.GET.get('sortby', '')
if sortby == 'name':
orderby = 'name'
elif sortby == 'latest':
orderby = '-dt_added'
elif sortby == 'likes':
orderby = '-facebook_likes'
else:
orderby = '-facebook_likes'
qset = (
Q(language=language)
# &
# Q(level=level)
)
resources = Resource.objects.filter(inactive=0).filter(qset).order_by(orderby)
form = FiltersAndSortingForm()
else:
form = FiltersAndSortingForm()
resources = Resource.objects.filter(inactive=0).order_by('-facebook_likes')
【问题讨论】:
-
好吧,
filter(Q(language="French")&Q(level="Beginner"))如果有既是法语又是初学者的资源,绝对应该可以工作。我会在你测试的地方删除一些东西,并验证这样的硬编码行是否有效...... -
另外,您提到的 language=french&language=german 仅返回法语。这是您想要的还是您遇到的另一个问题?
-
这就是问题所在。每个对象在模型中只有一种语言。在这里,我想在一个组合结果中返回带有法语的对象列表和带有德语的对象列表,但是当前的设置并没有给我。看起来它忽略了第一个参数之后的所有内容
标签: django django-forms django-q