элегантно отображать сумму на пользователя в django - PullRequest
0 голосов
/ 19 сентября 2019

пытается отобразить итоговую оценку за студента.Но вместо того, чтобы просто показать результат суммирования, он отображает часть набора запросов: например:

Annie <QuerySet [{'studName': None, 'attendance__sum': 3}, {'studName': 1, 'attendance__sum': 2}, {'studName': 2, 'attendance__sum': 1}]>

, и то же самое относится и к остальным студентам.

Я хотел бы отобразить это как:

Энни 2

Бенни 3

Чарли 4

Мой взгляд:

def attStudName(request):
    studentName = MarkAtt.objects.all()
    mark = MarkAtt.objects.values('studName').annotate(Sum('attendance'))
    context = {
        'studentName' : studentName,
        'mark' : mark

    }
    return render(request,'show-name.html',context)

Мой шаблон:

{% for y in mark %}

{% for x in studentName %}  

 <p>{{x.studName}}</p> <p> {{mark}}</p>

 {% endfor %}
{% endfor %}  

Как отобразить имя каждого студента с его собственной отметкой соответственно?И как отобразить отметку без

Отредактировано:

Model.py:

class Namelist(models.Model): 
    name = models.CharField(max_length=100)
    program = models.CharField(max_length=10)
    year = models.IntegerField(default=1)
    studType = models.CharField(max_length=15)
    courseType = models.CharField(max_length=15)
    nationality = models.CharField(max_length=20)
    VMSAcc = models.CharField(max_length=30)
    classGrp = models.ForeignKey('GroupInfo', on_delete=models.SET_NULL, null=True)


class MarkAtt(models.Model):
    studName = models.ForeignKey(Namelist,on_delete=models.SET_NULL,blank=True, null=True, default=None)
    classGrp = models.ForeignKey(GroupInfo, on_delete=models.SET_NULL, null=True)
    currentDate = models.DateField(default=now())
    week = models.IntegerField(default=1)
    attendance = models.IntegerField(default=100) #1 is present

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Вы слишком усложняете вещи.Учитывая следующий простой контекст:

students = MarkAtt.objects.values('studName').annotate(mark=Sum('attendance'))
context = {
    'students' : students,
}

вы можете сделать в шаблоне:

{% for student in students %}  
    <p>{{student.studName}}</p> <p> {{ student.mark}}</p>
{% endfor %}
1 голос
/ 19 сентября 2019

Ниже приведен набор значений quryset с именами и оценками учащихся.Два отдельных запроса не нужны.

students = MarkAtt.objects.values('studName').annotate(mark=Sum('attendance'))

Если studName - это ForeignKey, сделайте это .values('studName__name')

Тогда в вашем контексте вы можете просто добавить:

context = {
    students = students
}

После этого вы можете просмотреть students в своем шаблоне и отобразить данные в виде:

<p>{{x.studName}}</p> <p> {{x.mark}}</p>
...