Как написать представление Django для получения полей символов нескольких моделей Django, доступ к которым возможен только через отношения

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

Вопрос

Пожалуйста, ознакомьтесь со следующими моделями 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.marks".

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

Не мог бы кто-нибудь, пожалуйста, помочь мне с несколькими идеями?

С уважением.

Это было полезно?

Решение

Вам просто нужно получить все 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 %}

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top