Como escrever uma visão Django obter CharFields de vários modelos do Django que só podem ser acessados ??através de relações

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

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top