gpt4 book ai didi

python - Django get_queryset 多选过滤

转载 作者:行者123 更新时间:2023-12-01 07:30:38 24 4
gpt4 key购买 nike

我通过外键字段进行了一种过滤,具有两个搜索条件:OR 和 AND 以及多项选择。

forms.py

class EmployeeSkillFilter(forms.ModelForm):
skills = forms.ModelMultipleChoiceField(queryset=Technology.objects.all(), )

class Meta:
model = Employee
fields = ['skills']

templates.py

<form  method="get" enctype="multipart/form-data">
{% csrf_token %}
<input type="checkbox" name="and" value="AND"> Choice and<br>
<input type="checkbox" name="or" value="OR"> Choice OR<br>

{{ skill_filter }}
<button type="submit" class="btn btn-info" type="button">Go!</button>
</form>

views.py

class AccountList(AuthorizedMixin, ListView):

model = Employee
template_name = 'employee_list.html'

def get_queryset(self, *args, **kwargs):
condition_and = self.request.GET.get('and', None)
condition_or = self.request.GET.get('or', None)
skill = self.request.GET.get('skills', None)
if condition_and and skill:
object_list = self.model.objects.filter(skills__name_id=skill) ??????

if condition_or and tech:
object_list = self.model.objects.filter(
Q(skills__name_id=skill) |
Q(skills__name_id=skill)
) ?????
else:
object_list = self.model.objects.all()

我的网址看起来像

localhost://....or=OR&skills=5&skills=4&skills=3

问题是,当我在表单中选择多个对象时,我不知道如何将它们全部传递给条件

skills__name_id=skill 

最佳答案

使用__in lookup [Django-doc]查找,如果是 and 逻辑,则计算匹配的数量:

from django.db.models import <b>Count</b>

class AccountList(AuthorizedMixin, ListView):

model = Employee
template_name = 'employee_list.html'

def get_queryset(self, *args, **kwargs):
condition_and = self.request.GET.get('and', None)
condition_or = self.request.GET.get('and', None)
<b>skills</b> = self.request.GET.<b>getlist(</b>'skills'<b>)</b>
if condition_and:
object_list = self.model.objects.filter(
skills__in=skills
).annotate(
<b>nskills=Count('skills')</b>
).filter(
<b>nskills=len(skills)</b>
)
elif condition_or:
object_list = self.model.objects.filter(
<b>skills__in=skills</b>
).distinct()
else:
object_list = self.model.objects.all()

关于python - Django get_queryset 多选过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57217823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com