Wie eine Django-Ansicht schreiben CharFields mehrere Django-Modelle zu erhalten, die nur durch Beziehungen zugegriffen werden kann
-
21-08-2019 - |
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) anzuzeigenDas 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.
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.