Cómo escribir una vista de Django para obtener CharFields de múltiples modelos de Django que sólo se puede acceder a través de las relaciones

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

Pregunta

Por favor, consulte los siguientes modelos de 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)

necesito para mostrar el último modelo de "EducationalQualification) para un estudiante determinado en una cuadrícula (un estudiante puede tener múltiples EducationalQualifications).

La rejilla tiene columnas para "Nombre del estudiante", "nombre corto del examen", "Corto Nombre del sujeto", "EducationalQualification.institution", "EducationalQualification.from_date", "EducationalQualification.to_date", y "EducationalQualification. marcas".

He sido incapaz de llegar a una vista de Django para obtener estos datos (dado un Student.pk)

Podría alguien por favor me ayude con algunas ideas?

Saludos.

¿Fue útil?

Solución

Sólo tiene que ir a buscar todos los objetos EducationalQualification para ciertos estudiantes con todos sus objetos de relación:

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

Y luego, en lo que hace es repetir throught que:

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

Otros consejos

Crear una vista de base de datos y un modelo que especifica managed = False en su clase Meta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top