我有以下模型:
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
,我现在被困,非常感谢任何建议,非常感谢提前。
答案 0 :(得分:0)
技能需要是值列表而不是查询集对象。使用values_list从您感兴趣的技能对象中获取值列表。
skills = Skill.objects.filter(courses__in=course).values_list('FIELD_OF_INTEREST', flat=True)