Как отобразить в html имя студента, а не иностранный ключ? - PullRequest
1 голос
/ 03 марта 2020

Добрый день всем, надеюсь, вам достаточно названия, чтобы понять, в чем заключается моя проблема, у меня есть этот код в моих views.py

def corevalues(request):
    coregradelevel = request.GET.get('coregradelevel')

    teacher = request.GET.get('teacher')
    corevalues = CoreValues.objects.all().order_by('Display_Sequence')
    corevaluesdescription = CoreValuesDescription.objects.values('Description').distinct('Description').order_by('Description')
    corevaluesperiod = CoreValuesDescription.objects.all().order_by('Display_Sequence')
    print(corevaluesperiod)
    gradelevel = EducationLevel.objects.filter(id__in = coregradelevel).distinct().order_by('id')

    studentcorevalues = StudentsCoreValuesDescription.objects.filter(Teacher = teacher).filter(GradeLevel__in = gradelevel.values_list('id'))\
        .values('Students_Enrollment_Records').distinct('Students_Enrollment_Records').order_by('Students_Enrollment_Records')

    student = StudentSubjectGrade.objects.filter(Teacher = teacher).filter(GradeLevel__in = gradelevel.values_list('id'))\
        .values('Students_Enrollment_Records').distinct('Students_Enrollment_Records').order_by('Students_Enrollment_Records')

    return render(request, 'Homepage/behavior.html',{"studentcorevalues":studentcorevalues,"corevalues":corevalues,"corevaluesdescription":corevaluesdescription,\
                                                     "corevaluesperiod":corevaluesperiod,"student":student})

из этой строки

student = StudentSubjectGrade.objects.filter(Teacher = teacher).filter(GradeLevel__in = gradelevel.values_list('id'))\
            .values('Students_Enrollment_Records').distinct('Students_Enrollment_Records').order_by('Students_Enrollment_Records')

Я отфильтровываю и различаю имя учащегося, чтобы удалить дубликаты данных, но когда я отображаю их на моем html, результат будет

enter image description here

он отображает foriegnkey, а не имя студента, даже мой html является

{% for student in student %}

<tr>
<td>{{student.Students_Enrollment_Records}}</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>

{% endfor %}

это результат запроса студента, когда я его печатаю

<QuerySet [{'Students_Enrollment_Records': 1}, {'Students_Enrollment_Records': 5}, {'Students_Enrollment_Records': 9}, {'Students_Enrollment_Records': 13}, {'Students_Enrollment
_Records': 17}]>

я не знаю, почему он получает чужой ключ, это слишком запутанно.

ОБНОВЛЕНИЕ когда я попробовал это

student = StudentSubjectGrade.objects.filter(Teacher = teacher).filter(GradeLevel__Description = gradelevel.values_list('Description'))\
        .values('Students_Enrollment_Records').distinct('Students_Enrollment_Records').order_by('Students_Enrollment_Records')

ошибка говорит ValueError: Значение QuerySet для точный поиск должен быть ограничен одним результатом с использованием нарезки.

это мои models.py

class EducationLevel(models.Model):
    Sequence = models.IntegerField(null=True, blank=True)
    Description = models.CharField(max_length=500,blank=True,null=True)
    def __str__(self):
        suser = '{0.Description}'
        return suser.format(self)


class StudentsCoreValuesDescription(models.Model):
    Teacher = models.ForeignKey(EmployeeUser, related_name='+', on_delete=models.CASCADE,
                                null=True, blank=True)
    Core_Values = models.ForeignKey(CoreValuesDescription, related_name='+',
                                                    on_delete=models.CASCADE, null=True)
    Description = models.CharField(max_length=500, null=True, blank=True)

    Students_Enrollment_Records = models.ForeignKey(StudentsEnrolledSubject, related_name='+',
                                                    on_delete=models.CASCADE, null=True)
    GradeLevel = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,
                                   null=True, blank=True)
    Sections = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True)

    grading_Period = models.ForeignKey(gradingPeriod, related_name='+', on_delete=models.CASCADE,
                                       null=True, blank=True)
    remarks =  models.TextField(max_length=500, null=True, blank=True)

    def __str__(self):
        suser = '{0.Core_Values} - {0.Description}'
        return suser.format(self)

1 Ответ

1 голос
/ 03 марта 2020

Он получает идентификатор, потому что именно так он сохраняется в базе данных. Вы можете получить объект:

User.objects.get(pk=id)

**or**

user = get_object_or_404(User, pk=id)

, где id = идентификатор в вашей QS.

...