Como escrever uma visão Django obter CharFields de vários modelos do Django que só podem ser acessados ??através de relações
-
21-08-2019 - |
Pergunta
Por favor, consulte os seguintes modelos do Django: -
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)
Eu preciso exibir o último modelo "EducationalQualification) para um determinado estudante em uma grade (um estudante pode ter vários EducationalQualifications).
A grade tem colunas para "Nome de estudante", "Short Nome do exame", "Nome Curto de Assunto", "EducationalQualification.institution", "EducationalQualification.from_date", "EducationalQualification.to_date", e "EducationalQualification. marcas".
Eu não têm sido capazes de chegar a uma visão Django para obter esses dados (dado um Student.pk)
Alguém poderia me ajudar com algumas idéias?
Cumprimentos.
Solução
Você só precisa buscar todos os objetos EducationalQualification
para determinados aluno com todos os seus objetos de relação:
def view_qualifications(request, student_id):
qs = EducationalQualification.objects.filter(student__pk=student_id).\
select_related("student", "examination", "subject")
# ...
E, em seguida, no modelo apenas iterate passando por ele:
{% 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 %}
Outras dicas
Criar uma exibição de banco de dados e um modelo que especifica managed = False
em sua classe Meta.