【发布时间】:2020-08-24 17:09:01
【问题描述】:
我有一个名为 Course 的模型,我一直在尝试使用过滤器功能获取它们的列表。现在每门课程都有不同的领域。
我的课程模式是:
class Course(models.Model):
course_code = models.CharField(max_length=20)
course_university = models.CharField(max_length=100)
course_instructor = models.CharField(max_length=100)
course_year = models.IntegerField(('year'), validators=[MinValueValidator(1984), MaxValueValidator(max_value_current_year())])
course_likes = models.ManyToManyField(Profile, blank=True, related_name='course_likes')
course_dislikes = models.ManyToManyField(Profile, blank=True, related_name='course_dislikes')
course_reviews = models.ManyToManyField(Review, blank=True, related_name='course_reviews')
我正在为牛津大学名为“Smiths”的讲师准备课程
courses = Course.objects.filter(course_instructor="smiths",course_university="university")
如何删除具有此名称的重复项,例如显示最近年份的名称?
例如,2017、2018、2019年牛津大学Smith教授将开设ABC123课程。 . 我怎样才能只退回其中之一?我试过distinct(),但它不起作用。
有没有办法做到这一点?或者我应该改变我的数据库的整个结构?
编辑:我试过了,但它仍然给我重复:
course_dup = Course.objects.filter(course_instructor=par2,course_university=par1).values('course_instructor', 'course_university').annotate(course_year=Max('course_year'))
courses = Course.objects.filter(course_instructor__in=[c['course_instructor'] for c in course_dup], course_university__in=[c['course_university'] for c in course_dup])
为了澄清起见,假设有以下值:
course_code | course_instructor | course_year | course_university
1. ABC123 | smith | 2017 | Oxford
2. ABC123 | smith | 2017 | Oxford
3. CDE123 | smith | 2018 | Oxford
4. ADF123 | smith | 2019 | Oxford
5. ABC123 | smith | 2019 | Oxford
我只想返回例如 3,4,5,因为 5 是最新的课程代码 ABC123,甚至是查询返回 1,3,4 应该可以工作,因为 1 是匹配查询的第一个匹配项。我怎样才能做到这一点?
【问题讨论】:
标签: django django-models django-views django-templates