在Django中使用Joins进行查询

时间:2017-07-17 00:59:06

标签: python mysql django

class Students(models.Model):
    id = models.BigAutoField(primary_key=True)
    admission_no = models.CharField(max_length=255)
    roll_no = models.CharField(unique=True, max_length=50, blank=True, null=True)
    academic_id = models.BigIntegerField()
    course_parent_id = models.BigIntegerField()
    course_id = models.BigIntegerField()
    first_name = models.CharField(max_length=20)
    middle_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    user_id = models.BigIntegerField()
    date_of_birth = models.DateField(blank=True, null=True)
    date_of_join = models.DateField(blank=True, null=True)

class Courses(models.Model):
    id = models.BigAutoField(primary_key=True)
    parent_id = models.IntegerField()
    course_title = models.CharField(max_length=50)
    slug = models.CharField(unique=True, max_length=50)
    tenant_user = models.ForeignKey('Users', models.DO_NOTHING, default='')
    course_code = models.CharField(max_length=20)
    course_dueration = models.IntegerField()
    grade_system = models.CharField(max_length=10)
    is_having_semister = models.IntegerField()
    is_having_elective_subjects = models.IntegerField()
    description = models.TextField()
    status = models.CharField(max_length=8)
    created_at = models.DateTimeField(blank=True, null=True)
    updated_at = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'courses'

    def __unicode__(self):
        return self.course_title

class StudentProfileSerializer(ModelSerializer):

    class Meta:
        model = Students
        depth = 0
        fields = '__all__'

前两个表/类包含课程和学生表,第三个包含序列化程序。任何人都可以帮助如何使用django中的连接进行查询。我需要从Courses表中获取course_title,从Students表中获取first_name。

2 个答案:

答案 0 :(得分:1)

恕我直言,你应该检查一下你的模特; course_id in Students应该是一门课程= models.ForeignKey('Courses',...);这样你就可以用点符号来引用课程名称;

学生= Student.objects.filter(PK = ...)

引用您的必填字段:

student.last_name, student.course.course_title

此外,如果我理解你的模型,你可能会得到一些不一致...如果学生模型中course_parent_id中存储的值与Courses模型中parent_id中存储的值不同怎么办?也许第一个是多余的。

答案 1 :(得分:0)

要从相关对象查询字段,请使用双下划线。所以你可以做到

Student.objects.filter(**kwargs).values('first_name', 'last_name', 'course__course_name')