Django 包含多对多字段
Django contains on a many to many field
我正在努力寻找具有轮班所需技能的用户。这意味着用户需要具备确切的技能或更多。
我试过了。但这不适用于关系字段
User.objects.filter(skills__contains=skills)
in
运算符也不起作用,因为我需要一个拥有所有技能的用户,而不是拥有所需技能子集的用户。
有没有办法检索所询问的技能是用户技能的子集的用户?
可以使用一个__in
lookup [Django-doc],然后统计匹配的个数是否与skills
中的元素个数相同。我们在这里假设 skills
包含 unique 元素(因此没有重复)。您可以先将技能列表转换为 set
以排除重复项。
因此我们可以过滤:
from django.db.models import Count
User.objects.filter(
<b>skills__in=skills</b>
).annotate(
<b>matching_skills=Count('skills')</b>
).filter(
<b>matching_skills=len(skills)</b>
)
我正在努力寻找具有轮班所需技能的用户。这意味着用户需要具备确切的技能或更多。
我试过了。但这不适用于关系字段
User.objects.filter(skills__contains=skills)
in
运算符也不起作用,因为我需要一个拥有所有技能的用户,而不是拥有所需技能子集的用户。
有没有办法检索所询问的技能是用户技能的子集的用户?
可以使用一个__in
lookup [Django-doc],然后统计匹配的个数是否与skills
中的元素个数相同。我们在这里假设 skills
包含 unique 元素(因此没有重复)。您可以先将技能列表转换为 set
以排除重复项。
因此我们可以过滤:
from django.db.models import Count
User.objects.filter(
<b>skills__in=skills</b>
).annotate(
<b>matching_skills=Count('skills')</b>
).filter(
<b>matching_skills=len(skills)</b>
)