2009-03-24 10 views
0

S'il vous plaît voir les modèles Django suivants: -Comment écrire une vue Django pour obtenir CharFields de plusieurs modèles Django qui ne sont accessibles que par le biais des relations

class Student(models.Model): 
    reference_num = models.CharField(max_length=50, unique=True) 
    name = models.CharField(max_length=50) 
    birthdate = models.DateField(null=True, blank=True) 
    is_active = models.BooleanField(db_index=True) 

class Examination(models.Model): 
    short_name = models.CharField(max_length=20, unique=True) 
    name = models.CharField(max_length=50, unique=True) 
    is_active = models.BooleanField(db_index=True) 

class Subject(models.Model): 
    short_name = models.CharField(max_length=20, unique=True) 
    name = models.CharField(max_length=50, unique=True) 
    is_active = models.BooleanField(db_index=True) 

class EducationalQualification(models.Model): 
    student = models.ForeignKey(Student) 
    examination = models.ForeignKey(Examination) 
    subject = models.ForeignKey(Subject, null=True, blank=True) 
    institution = models.CharField(max_length=50) 
    from_date = models.DateField(null=True, blank=True) 
    to_date = models.DateField() 
    marks = models.DecimalField(max_digits=5, decimal_places=2) 

je dois afficher le dernier modèle « EducationalQualification) pour une Étudiant dans une grille (un Étudiant peut avoir plusieurs Qualifications Éducatives)

La grille contient des colonnes pour "Nom de l'étudiant", "Nom abrégé de l'examen", "Nom abrégé du sujet", "Qualification pédagogique.institution", " EducationalQualification.from_date "," EducationalQualification.to_date "et" EducationalQualification.marks ".

Je suis incapable de trouver une vue Django pour obtenir ces données (données un Student.pk)

Quelqu'un pourrait-il me aider s'il vous plaît avec quelques idées?

Cordialement.

Répondre

3

Vous avez juste besoin d'aller chercher tous les EducationalQualification objets pour certains étudiants avec tous leurs objets de relation:

def view_qualifications(request, student_id): 
    qs = EducationalQualification.objects.filter(student__pk=student_id).\ 
          select_related("student", "examination", "subject") 
    # ... 

Et puis dans le modèle juste itérer throught il:

{% for q in qs %} 
<tr> 
    <td>{{q.student.name}}</td> 
    <td>{{q.examination.short_name}}</td> 
    <td>{{q.subject.short_name}}</td> 
    <td>{{q.institution}}</td> 
    <td>{{q.from_date}}</td> 
    <td>{{q.to_date}}</td> 
    <td>{{q.marks}}</td> 
</tr> 
{% endfor %} 
+0

Fonctionne parfaitement! Je pensais que cela ne marcherait pas parce que j'avais null = True pour le sujet ForeignKey. Mais cela fonctionne exactement comme il se doit. Vous pourriez même dire RTFM je suppose :) Merci. – chefsmart

+0

Si vous êtes un objet étudiant, vous pouvez également le référencer dans l'autre sens. Student.educationqualification_set.all() vous obtiendra la même chose. – dalore

+0

Veuillez nous montrer la sortie de '' print qs.query''. –

0

Créer une vue de base de données et un modèle qui spécifie managed = False dans sa classe Meta.