Как написать представление Django для получения CharFields нескольких моделей Django, к которым можно получить доступ только через отношения - PullRequest
0 голосов
/ 24 марта 2009

Пожалуйста, смотрите следующие модели 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)

Мне нужно отобразить последнюю модель "EducationalQualification" для данного Ученика в сетке (у Ученика может быть несколько образовательных квалификаций).

Сетка содержит столбцы для «ФИО студента», «Краткое имя экзамена», «Краткое имя предмета», «EducationalQualification.institution», «EducationalQualification.from_date», «EducationalQualification.to_date» и «EducationalQualification. знаки ".

Мне не удалось получить представление Django для получения этих данных (с учетом Student.pk)

Может ли кто-нибудь помочь мне с несколькими идеями?

Привет.

Ответы [ 2 ]

3 голосов
/ 24 марта 2009

Вам просто нужно получить все EducationalQualification объекты для определенного ученика со всеми их объектами отношений:

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

А затем в шаблоне просто переберите его:

{% 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 %}
0 голосов
/ 20 июля 2012

Создайте представление базы данных и модель, которая задает managed = False в своем мета-классе.

...