【发布时间】:2018-10-20 12:41:42
【问题描述】:
我的模型如下:
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,
)
我想过滤具有完全匹配技能的 Permit 对象出现在课程中(技能在课程中),所以我过滤了列表课程和技能,如下所示:
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,我现在被困住了,非常感谢任何建议,提前非常感谢。
【问题讨论】:
-
stackoverflow.com/questions/8618068 查看这个 SO 问题,他们提出了一种聚合方法,您可以执行类似
queryset = Permit.objects.filter(skill_course__in=skills).annotate(num_skills=Count('skills')).filter(num_skills=skills.count())的操作 -
谢谢 Bhavani,我已经看过那篇文章了,我猜它不一样?因为我总是得到错误的结果,我需要先定义技能课程吗?我把我的代码改成了你的,没有任何改变......
标签: django listview filter django-queryset exact-match