在我的模型中,我有一个用户表(他是学生或教师 - 我有一个连接到auth.User的UserProfile表),一个用于课程的表,以及一个名为enrollment的表,它记录了哪些学生已注册在哪些课程。我的models.py如下:
class Course(models.Model):
name = models.CharField(max_length=40)
instructor = models.ForeignKey(UserProfile, related_name="Instructor")
students = models.ManyToManyField(UserProfile, through='Enrollment')
class UserProfile(models.Model):
user = models.OneToOneField(User, primary_key=True)
role = models.CharField(max_length=4, choices=ROLE_CHOICES) # 'stud' or 'inst'
class Enrollment(models.Model):
course = models.ForeignKey(Course)
student = models.ForeignKey(UserProfile)
对于给定的用户,我想查找他/她注册的所有课程。我该怎么做?
另外,我在哪里可以找到有关如何在Django中进行查询的详尽说明,最好是有很多复杂性慢慢增加的例子?
答案 0 :(得分:3)
如果您有UserProfile
个实例user_profile
,请尝试:
courses = Course.objects.filter(students=user_profile)
如果您有User
个实例user
,则可以使用双下划线表示法。
courses = Course.objects.filter(students__user=user)
要获得解释,我将从Making queries的django文档开始。其他人可能会有其他一些建议。
暂且不说:在这种情况下,除非您使用遗留数据库,否则您实际上不需要显式定义连接表Enrollment
,因为您尚未定义任何额外字段。
答案 1 :(得分:2)
如果您拥有User
个实例中的username
字段,而不是User
个实例,则可以执行以下操作:
courses = Course.objects.filter(students__user__username='thespecificusername')
您正在构建的场景与此处讨论的场景非常相似:https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships