如何用Django编写这个querySet?

时间:2016-09-29 09:43:11

标签: python django django-models

我开始学习Django QuerySets,但在这种情况下我没有成功编写它,我必须将2个与外键相关的模型重新集中。

我有2个模型usercourse,其中课程包含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' ;

有人可以帮我吗?

1 个答案:

答案 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模型名称以大写后者开头。您的模型是“用户”,但实际上应该是“用户”