我开始学习Django QuerySets,但在这种情况下我没有成功编写它,我必须将2个与外键相关的模型重新集中。
我有2个模型user
和course
,其中课程包含user
的外键
class user(models.Model):
first_name = models.CharField(max_length=100)
middle_name = models.CharField(max_length=100, null=True, blank=True)
class Course(models.Model):
user= models.ForeignKey(User)
course_name = models.CharField(max_length=100)
我希望将此sql
语句翻译为querysets
:
select * from user u, course c
where u.id = c.user_id
and c.course_name='science' ;
有人可以帮我吗?
答案 0 :(得分:2)
如果您想要的是一套课程,每个课程实例都有一组相关用户,您可以这样做:
Course.objects.select_related('user').filter(course_name='science')
请参阅:https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-related
select_related(* fields)返回将“跟随”的QuerySet 外键关系,选择其他相关对象数据 当它执行其查询时。这是一个性能助推器 导致单个更复杂的查询,但意味着以后使用 外键关系不需要数据库查询。
另一方面,如果您想要一个用户列表和他们所关注的课程,那么
user.objects.filter(course__name='science')
这是外键关系的反向遍历。请注意,根据惯例,django模型名称以大写后者开头。您的模型是“用户”,但实际上应该是“用户”