【问题标题】:simple django join query without foreign key没有外键的简单 django 连接查询
【发布时间】:2016-01-14 14:19:07
【问题描述】:

** 下面是两个模型教师和登录学生,一个教师可以教多个部分,多个学生可以在同一个部分。所以部分字段不能是外键。如果我想找出特定学生的所有课程,我该怎么办?有没有像sql一样的简单django查询。怎么办? **

class Teacher(models.Model):
    username=models.CharField(max_length=50)
    password=models.CharField(max_length=89)
    course=models.CharField(max_length=30)
    section=models.CharField(max_length=30)

class LoginStudent(models.Model):
    username=models.CharField(max_length=50)
    password=models.CharField(max_length=89)
    section=models.CharField(max_length=30)

【问题讨论】:

  • 您是否尝试过任何方法来完成这项工作。
  • @CurseStacker newobj=teacher.objects.raw('select * from app_teacher t,app_loginstudent l where l.section=t.section and l.username=%s ',[name]) .. name 是我要列出其课程的学生姓名
  • 你的意思是一个loginStudent只能有一个section?如果是这样,那么一个学生只能有课程,我理解正确吗?
  • @shellbye no.one loginstudent只有一个section,但是很多课程可以在同一个section,所以学生可以有多个课程

标签: mysql django django-models django-queryset foreign-key-relationship


【解决方案1】:

好的,我建议坚持使用 Django 的默认用户系统,并在需要时构建特定类型的一对一配置文件。稍后您可以根据外键的值区分用户,或者您可以实现与用户类型相关的权限

from django.db.models.query_utils import Q


# for example, this could be a way to extend users to hold teachers and students
class TeacherProfile(models.Model):
    user = models.OneToOneField(User, related_name='teacher_profile')
    # other relevant teacher profile items
ONLY_TEACHERS_FILTER = Q(teacher_profile__isnull=False) & Q(student_profile__isnull=True)


class StudentProfile(models.Model):
    user = models.OneToOneField(User, related_name='student_profile')
    # other relevant student profile items
    sections = models.ManyToManyField('Section', related_name='students')   # mind the quotes to Section name


class Section(models.Model)
    name = models.CharField(max_length=50)
    # other section fields goes here...


class Course(models.Model):
    name = models.CharField(max_length=50)
    teacher = models.ForeingKey(User, related_name='courses', limit_choices_to=ONLY_TEACHERS_FILTER)
    sections = models.ManyToManyField(Section, related_name='courses')

现在回答学生参加哪些课程的问题:

queryset = Course.objects.filter(section__students__in=[user])

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 2013-11-04
    • 2013-05-16
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2021-04-08
    相关资源
    最近更新 更多