2016-12-21 3 views
0
class Grade(models.Model): 
    name = models.CharField(u'年级', max_length=64) 
    school = models.ForeignKey('School', verbose_name=u'学校') 

    def __unicode__(self): 
     return self.name 

class Class(models.Model): 
    name = models.CharField(u'班级', max_length=64) 
    grade = models.ForeignKey('Grade', verbose_name=u'年级', related_name='grade') 

    def getGradeName(self): 
     return self.grade.name 

    def __unicode__(self): 
     return self.name 

class Student(models.Model): 
    name = models.CharField(u'姓名', max_length=64) 
    sex = models.CharField(u'性别', max_length=64) 
    id_num = models.CharField(u'身份证号', max_length=64) 
    student_num = models.CharField(u'学号', max_length=64) 
    class_id = models.ForeignKey('Class', verbose_name=u'班级', related_name='class_id') 
    grade = class_id.name 

    def __unicode__(self): 
     return self.name 

Ich möchte students'class'grade bekommen und es dann in Modell Student Klasse zuweisen.Zugriff auf das Attribut eines anderen Modells in einem Modell über Fremdschlüssel in Django?

Wie Grade Name in Musterschüler zu bekommen?

Antwort

0
#get first student in table 
s = Student.object.all()[0] 
# get Grade access through Class model 
print s.class_id.grade 
+0

In Musterschüler sein? – Ferris

+2

Bitte vermeiden Sie Code-Only-Antworten. Versuchen Sie zu erklären, wie Ihr Code das Problem von OP löst. Andere, die diese Frage haben, haben vielleicht nicht so viel Erfahrung wie du; hilf ihnen zu verstehen. –

1

Da grade wird, dass die Class Instanz von Student sein, würde ich die grade Klassenvariable von Student Entfernen vorschlagen und stattdessen ein property die Klasse Student hinzufügen. So was.

class Student(models.Model): 
    name = models.CharField(u'姓名', max_length=64) 
    sex = models.CharField(u'性别', max_length=64) 
    id_num = models.CharField(u'身份证号', max_length=64) 
    student_num = models.CharField(u'学号', max_length=64) 
    class_id = models.ForeignKey('Class', verbose_name=u'班级', related_name='class_id') 

    def __unicode__(self): 
     return self.name 

    @property 
    def grade_name(self): 
     return self.class.grade.name 

Und die grade einer Student Instanz zu erhalten, wäre es

student = Student.object.all()[0] 
grade = student.grade_name 
+0

Wo hinzuzufügen '' 'Student = Student.object.all() [0] Grad = student.grade_name''' – Ferris

+0

Aber ich möchte zeigen in' '' Klasse StudentAdmin (admin.ModelAdmin): list_display = [‘ name ',' Geschlecht ',' id_num ',' student_num ',' class_id '] '' ' – Ferris

Verwandte Themen