Django过滤查询集__in完全匹配

时间:2018-05-10 09:25:29

标签: django listview filter django-queryset exact-match

我有以下模型:

class Skill(models.Model):
    name = models.CharField(max_length=100, default="")

class Permit(models.Model):
    name = models.CharField(max_length=50)
    skill_course = models.ManyToManyField(
        Skill, related_name="+", blank=True,
    )

class Course(models.Model):
    name = models.CharField(max_length=50)
    skills = models.ManyToManyField(
        Skill, related_name="courses",blank=True,
    )

我想过滤Permits对象,这些对象具有与课程相关的精确匹配技能(技能在课程中),所以我过滤了列表课程和技能,如下所示:

course = Course.objects.filter(students=self.request.user, date__lt=datetime.datetime.today())
skills = list(Skill.objects.filter(courses__in=course).distinct())
queryset = Permit.objects.filter(skill_course__in=skills)

但这是模糊匹配,而不是精确匹配。例如:

# only if list permit_a = user.skill_a, current user will get permit_a
permit_a = [A, B, C, D]
user.skill_a = [A, B, C, D]

但现在user.skill_a = [B, E, F],当前用户已经获得permit_a,我现在被困,非常感谢任何建议,非常感谢提前。

1 个答案:

答案 0 :(得分:0)

技能需要是值列表而不是查询集对象。使用values_list从您感兴趣的技能对象中获取值列表。

skills = Skill.objects.filter(courses__in=course).values_list('FIELD_OF_INTEREST', flat=True)