Wie eine Django-Ansicht schreiben CharFields mehrere Django-Modelle zu erhalten, die nur durch Beziehungen zugegriffen werden kann

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

Frage

Bitte beachten Sie die folgenden Django Modelle: -

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)

Ich brauche für einen bestimmten Schüler in einem Raster (ein Student kann mehrere EducationalQualifications hat).

das letzte Modell „EducationalQualification) anzuzeigen

Das Gitter hat Spalten für "Namen der Schüler", "Kurzname der Prüfung", "Kurzname Betreff", "EducationalQualification.institution", "EducationalQualification.from_date", "EducationalQualification.to_date" und „EducationalQualification. Markierungen“.

Ich habe nicht in der Lage gewesen, mit einem Django Ansicht zu entwickeln, um diese Daten zu bekommen (da eine Student.pk)

Könnte jemand bitte helfen Sie mir mit ein paar Ideen?

Viele Grüße.

War es hilfreich?

Lösung

Sie müssen nur alle EducationalQualification Objekte für bestimmte Schüler holen mit all ihrer Beziehung Objekten:

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

Und dann in Vorlage nur iterieren Throught es:

{% 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 %}

Andere Tipps

Erstellen Sie eine Datenbank-View und ein Modell, das managed = False in seiner Meta-Klasse gibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top