Comment écrire une vue Django pour obtenir CharFields de plusieurs modèles Django qui ne sont accessibles que par le biais des relations

StackOverflow https://stackoverflow.com/questions/676267

Question

S'il vous plaît voir les modèles Django suivants: -

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 un étudiant donné dans une grille (un étudiant peut avoir plusieurs EducationalQualifications).

La grille comporte des colonnes pour « Nom de l'étudiant », « Nom court de l'examen », « Nom abrégé du sujet », « EducationalQualification.institution », « EducationalQualification.from_date », « EducationalQualification.to_date » et « EducationalQualification. marques ».

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

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

Cordialement.

Était-ce utile?

La solution

Vous avez juste besoin de chercher tous les objets pour certains EducationalQualification étudiant 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 %}

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top