Форум сайта python.su
Кто знает если есть такая модель, как можно вывести все оценки определенного студента какого-то заданого предмета?
# -*- coding: utf-8 -*- from django.db import models class Subjects(models.Model): name_teacher=models.CharField(max_length=50, verbose_name=u'Полное имя преподавателя') subject=models.CharField(max_length=50, verbose_name=u'Предмет') def __unicode__(self): return u'%s'%(self.subject) class Students(models.Model): name = models.CharField(max_length=50, verbose_name=u'Полное имя') date_of_birth = models.DateField(verbose_name=u'Дата рождения') num_stud=models.CharField(max_length=50,verbose_name=u'Номер студ. билета ') group=models.ForeignKey('Groups',verbose_name=u'Группа, к которой прикреплен студент') subject_stud=models.ManyToManyField('Subjects',blank=True, null=True, verbose_name='Предмет, который изучает студент') def __unicode__(self): return u'%s'%(self.name) class Groups(models.Model): name_group = models.CharField(max_length=100, verbose_name=u'Название группы') headman = models.ForeignKey('Students', blank=True, null=True, verbose_name=(u'Староста'), related_name='students') subject_group=models.ManyToManyField('Subjects',blank=True, null=True, verbose_name='Изучаемые предметы') def __unicode__(self): return u'%s'%(self.name_group) class Marks(models.Model): mark=models.IntegerField( verbose_name=u'Оценка') stud_mark=models.ManyToManyField('Students',blank=True, null=True, verbose_name='Оценки студента') subject_mark=models.ManyToManyField('Subjects',blank=True, null=True, verbose_name='Оценки по предмету') data_mark=models.DateField(verbose_name=u'Дата оценки') def __unicode__(self): return u'%s'%(self.mark)
<table border="2" align="center" > <caption><h1> Оценки по предмету {{sub.subject}} </h1></caption> <tr style="background-color:gray"> <th>№</th> <th>Имя, фамилия студента</th> <th >Оценка</th></tr> {%for i in stud%} <tr style="background-color:silver"> <td scope="row">{{forloop.counter}}.</td> <td scope="row"><a href="/grou/{{ i.id }}/">{{ i.name }}</a></td> {%for j in i.marks_set.all%} -------------вот сдесь как записать что бы не все оценки были а только те которые имеет студент по определенному предмету stud(2).marks_set.filter(subject_mark=s) <td style="background-color:white">{{j}} </td>{%endfor%} </tr>{%endfor%} </table>
Отредактировано anton41k (Фев. 10, 2014 18:11:19)
Офлайн
Может с помощью какого-то фильтра?
Офлайн
Офлайн
Не нужно этого делать в шаблоне, сделайте всю выборку во view, приведите результат к удобному виду и передайте его в составе контекста в шаблон.
Офлайн
Нашел такое решение:
from django import template from students.models import Students,Groups,Subjects,Marks register=template.Library() @register.filter def filtrmark(value,arg): s=Subjects.objects.get(pk=arg) return value.marks_set.filter(subject_mark=s)
Офлайн
anton41k
шо это за костыль?
Кстати в Marks надо сменить many на foreighn
https://docs.djangoproject.com/en/1.6/topics/db/queries/#lookups-that-span-relationships
Отредактировано Singularity (Фев. 11, 2014 14:35:43)
Офлайн
Но мне нужно что бы у каждой оценки была своя дата.А если сделать как вы предлогаете то прийдется добавлять еще класс даты.
Офлайн
anton41kя не понял вашей логики
Но мне нужно что бы у каждой оценки была своя дата.А если сделать как вы предлогаете то прийдется добавлять еще класс даты.
Офлайн
Это костыльный метод. Но будет работать, я бы оценки достал отсортированные по студентам, а затем бы вывел и по порядку с указанием студента и даты. Должно вроде работать.
Офлайн
Да если разобратся то вы правы.
Офлайн