2017-07-17 9 views
0
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__' 

Die ersten zwei Tabellen/Klasse enthält die Kurs- und Student-Tabelle und die dritte enthält den Serializer. Kann mir bitte jemand helfen, wie man die Joins in django abfragt. Ich muss den course_title aus der Tabelle Courses und first_name aus der Students-Tabelle abrufen.Abfrage mit Joins in Django

+0

Sie sollten richtige Fremdschlüssel in Ihren Modellen mit guten Reverse-Namen verwenden. Das wird dir auf lange Sicht so viel Zeit sparen. – Grimmy

Antwort

0

Um ein Feld von einem verwandten Objekt abzufragen, verwenden Sie einen doppelten Unterstrich. So könnten Sie tun

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

Vielen Dank @cory madden ich werde es versuchen. –

1

IMHO, sollten Sie Ihre Modelle überprüfen; course_id in Studenten sollte ein Kurs = models.ForeignKey ('Kurse', ...) sein; Auf diese Weise können Sie den Kurstitel in Punktnotation verwenden;

Student = Student.objects.filter (pk = ...)

auf Ihre erforderlichen Felder zu verweisen:

student.last_name, student.course.course_title 

Außerdem, wenn ich Ihre Modelle verstanden, könnten Sie etwas Inkongruenz bekommen. .. Was ist, wenn der Wert, der in student-Modell in Kurs-Parent-ID gespeichert ist, sich von dem Wert unterscheidet, der in Kurs-Modell in Parent-ID gespeichert ist? vielleicht ist der erste überflüssig.