Come scrivere una vista Django per ottenere CharFields di più modelli Django che possono essere raggiunte solo attraverso le relazioni

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

Domanda

Si prega di consultare i seguenti modelli di 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)

Ho bisogno di visualizzare l'ultimo modello "EducationalQualification) per un determinato studente in una griglia (uno studente può avere più EducationalQualifications).

La griglia ha colonne per "Nome di studente", "Short Nome di esame", "Short Nome del Soggetto", "EducationalQualification.institution", "EducationalQualification.from_date", "EducationalQualification.to_date", e "EducationalQualification. marchi".

Sono stato in grado di trovare una vista Django per ottenere questi dati (data una Student.pk)

Potrebbe qualcuno soddisfare per aiutarlo con poche idee?

Saluti.

È stato utile?

Soluzione

Hai solo bisogno di recuperare tutti gli oggetti EducationalQualification per alcuni studenti con tutti i loro oggetti di relazione:

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

E poi nel modello solo scorrere throught che:

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

Altri suggerimenti

Crea una vista di database e un modello che specifica managed = False nella sua classe di Meta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top