Почему html показывает идентификатор, а не текст? используя Django - PullRequest
0 голосов
/ 26 февраля 2020

Я только что закончил создавать свою таблицу в моем views.py, но когда я применяю его к html, я получаю идентификатор, а не текст, пожалуйста, смотрите ссылку, которую я разместил ниже, потому что я не могу опубликовать изображение здесь, я новичок здесь

if request.method != 'POST':
        raise Http404('Only POSTs are allowed')
    try:
        m = EmployeeUser.objects.get(Username=request.POST['p_user'], Password=request.POST['p_pass'],
                                     My_Position=request.POST['position'])

        #print(request.POST['position'])
        if m.My_Position.id != request.POST['position']:
            request.session['member_id'] = m.id
            aa = request.POST['p_user']
            ss = EmployeeUser.objects.all().filter(Username=aa)

            teacher = SubjectSectionTeacher.objects.filter(Employee_Users__id=m.id)

            student_subject = Subject.objects.filter(id__in=teacher.values_list('Subjects')).distinct().order_by('id')
            student_section = Section.objects.filter(id__in=teacher.values_list('Sections')).distinct().order_by('id')
            student_gradelevel = EducationLevel.objects.filter(
                id__in=teacher.values_list('Education_Levels')).distinct().order_by('id')

            cate = gradingCategories.objects.all()
            studentenrolledsubject = StudentsEnrolledSubject.objects.filter(
                Subject_Section_Teacher__in=teacher.values_list('id')).distinct().order_by('id')
            period = gradingPeriod.objects.filter(
                Grading_Periods_Setting__Education_Levels__in=student_gradelevel.values_list('id')).distinct().order_by(
            'id')

            students = studentsEnrolledSubjectsGrade.objects.filter(Teacher=m.id).filter(
            grading_Period__in=period.values_list('id')).filter(
            Subjects__in=student_subject.values_list('id')).filter(Grading_Categories__in=cate.values_list('id')).filter(GradeLevel__in=student_gradelevel.values_list('id')).order_by(
            'Students_Enrollment_Records', 'Grading_Categories'
        ).values('Students_Enrollment_Records', 'Grading_Categories',
                 'Grade').distinct()

        Categories = list(cate.values_list('id', flat=True).order_by('id')
        table = []
        student_name = None
        table_row = None
        columns = len(Categories) + 1
        #
        # # table header
        table_header = ['Student Names']
        table_header.extend(Categories)

        table.append(table_header)

        for student in students:
            if not student['Students_Enrollment_Records'] == student_name:
                if not table_row is None:
                    table.append(table_row)
                table_row = [None for d in range(columns)]
                student_name = student['Students_Enrollment_Records']
                table_row[0] = student_name
            table_row[Categories.index(student['Grading_Categories']) + 1] = student['Grade']

        table.append(table_row)

Это models.py

class studentsEnrolledSubjectsGrade(models.Model):
     Teacher = models.ForeignKey(EmployeeUser, related_name='+', on_delete=models.CASCADE,
null=True, blank=True)

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

     Subjects = models.ForeignKey(Subject, related_name='+', on_delete=models.CASCADE, null=True)

     Students_Enrollment_Records = models.ForeignKey(StudentsEnrolledSubject, related_name='+',
on_delete=models.CASCADE, null=True)

     Grading_Categories = models.ForeignKey(gradingCategories, related_name='+', on_delete=models.CASCADE,
null=True, blank=True)

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

    _dates = models.CharField(max_length=255,null=True, blank=True)

    Grade = models.FloatField(null=True, blank=True)

     @property
       def dates(self):
       # you have Year-month-day dates from the form
       return [datetime.strptime(date, '%Y-%m-%d') for date in self._dates]

     @dates.setter
        def dates(self, values):
        # '|' as delimiter
        self._dates = '|'.join(values)

и html

<table>
        <tr>
        {% for v in table.0 %}
            {% if forloop.first %}
                <th id="thupdate">{{v}}</th>
            {% else %}
                <th ><input type="text" name="updatedate" value="{{ v }}"></th>
            {% endif %}
        {% endfor %}
        <th  hidden></th>
        <th data-id='headerss' id='headerave'>Average</th>
    </tr>

    <tbody>
    {% for row in table|slice:"1:" %}
        <tr class="tr2update">
            <td>{{row.0}}</td>
             <td class="tdupdate" hidden><input type="text" hidden></td>
            {% for c in row|slice:"1:"  %}
            <td>
                <input type="text"  data-form-field="{{teacher.id}}" name="oldgrad" class="oldgrad"  value="{{teacher.Grade}}"/>
            </td>
            {% endfor %}
            <td data-id='row' id="ans"><input type='number' class='averages' step="any" name="average" readonly/></td>
        </tr>
            {% endfor %}
             </tbody>
    </table>  

, когда я пытаюсь распечатать Categories = StudentsEnrolledSubjectsGrade.objects.filter (Grading_Categories__in = cate.values_list ('id')). Order_by ('Grading_Categories') там написано [1, 2] Я не знаю, как получите текст, пожалуйста, помогите мне, ребята

Это то, что я хочу, результат

Правильный результат

мой текущий результат

моя база данных в admin.py

admin site

ОБНОВЛЕНИЕ

, когда я пытаюсь ответить на вопрос г-на Криса

table_header.extend(list(Categories.values_list('gradingcategories__name', flat=True)))

Я получил эту ошибку У объекта 'list' нет атрибута 'values_list'

ОБНОВЛЕНИЕ

students = studentsEnrolledSubjectsGrade.objects.filter(Teacher=m.id).filter(
                grading_Period__in=period.values_list('id')).filter(
                Subjects__in=student_subject.values_list('id')).filter(Grading_Categories__in=cate.values_list('id')).filter(GradeLevel__in=student_gradelevel.values_list('id')).order_by(
                'Students_Enrollment_Records__Students_Enrollment_Records__Student_Users', 'Grading_Categories'
            ).values('Students_Enrollment_Records__Students_Enrollment_Records__Student_Users', 'Grading_Categories',
                     'Grade').distinct()

            teacherStudents = StudentsEnrolledSubject.objects.filter(
                id__in=students.values_list('Students_Enrollment_Records'))
            Categories = list(cate.values_list('id', flat=True).order_by('id'))
            #print(Categories)
            table = []
            student_name = None
            table_row = None
            columns = len(Categories) + 1
            table_header = ['Student Names']

            table_header.extend(list(cate.values_list('CategoryName', flat=True)))

            table.append(table_header)

            for student in students:
                if not student['Students_Enrollment_Records__Students_Enrollment_Records__Student_Users'] == student_name:
                    if not table_row is None:
                        table.append(table_row)
                    table_row = [None for d in range(columns)]
                    #print("table_row", table_row)
                    student_name = student['Students_Enrollment_Records__Students_Enrollment_Records__Student_Users']
                    #print("student_name", student_name)
                    table_row[0] = student_name
                table_row[Categories.index(student['Grading_Categories']) + 1] = rate
                #print("table_row[Categories.index(student['Grading_Categories']) + 1]", table_row[Categories.index(student['Grading_Categories']) + 1])

            table.append(table_row)

дополнительные модели

class StudentsEnrollmentRecord(models.Model):
    Student_Users = models.ForeignKey(StudentProfile, on_delete=models.CASCADE,null=True)
    Old_Student = models.BooleanField( blank=True)
    New_Student = models.BooleanField(blank=True)
    Date_Time = models.DateField(auto_now_add=True)
    School_Year = models.ForeignKey(SchoolYear, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    strands = models.ForeignKey(strand, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Section = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True,blank=True)
    Payment_Type = models.ForeignKey(PaymentType, related_name='+', on_delete=models.CASCADE, null=True)

class StudentsEnrolledSubject(models.Model):
    Students_Enrollment_Records = models.ForeignKey(StudentsEnrollmentRecord, related_name='+', on_delete=models.CASCADE,null=True)
    Subject_Section_Teacher = models.ForeignKey(SubjectSectionTeacher, related_name='+', on_delete=models.CASCADE,null=True)

1 Ответ

0 голосов
/ 26 февраля 2020

Обычно, если вы делаете что-то вроде print(myobject), вам нужен более значимый вывод, чем et c. Поэтому всегда полезно добавить явное строковое представление, добавив метод __str__ в вашу модель. Итак, позвольте нам сказать, что ваша модель gradingCategories имеет имя CharField с именем name, это будет что-то вроде

def __str__(self):
    return self.name

Чтобы подробно описать поле, которое вы хотите в своем списке, которое описывает заголовок таблицы, который вы можете использовать __ django сказать, какое поле использовать. Поэтому попробуйте что-то вроде этого

table_header.extend(Categories.values_list('gradingcategories__name', flat=True))

в предположении, что «имя» - это поле, которое вам нужно.

Чтобы получить имя студента вместо идентификатора:

Измените эту строку в вашем коде

students = studentsEnrolledSubjectsGrade.objects.filter(Teacher=m.id).filter(
                grading_Period__in=period.values_list('id')).filter(
                Subjects__in=student_subject.values_list('id')).filter(Grading_Categories__in=cate.values_list('id')).filter(GradeLevel__in=student_gradelevel.values_list('id')).order_by(
                'Students_Enrollment_Records__Students_Enrollment_Records__Student_Users', 'Grading_Categories'
            ).values('Students_Enrollment_Records__Students_Enrollment_Records__Student_Users', 'Grading_Categories',
                     'Grade').distinct()

на что-то вроде

students = studentsEnrolledSubjectsGrade.objects.filter(Teacher=m.id).filter(
                grading_Period__in=period.values_list('id')).filter(
                Subjects__in=student_subject.values_list('id')).filter(Grading_Categories__in=cate.values_list('id')).filter(GradeLevel__in=student_gradelevel.values_list('id')).order_by(
                'Students_Enrollment_Records', 'Grading_Categories'
            ).values('Students_Enrollment_Records__Student_Users__name', 'Grading_Categories',
                     'Grade').distinct()

, если 'name' - это поле в StudentProfile, содержащее нужное имя.

и использовать это поле при создании строк таблицы

student_name = student['Students_Enrollment_Records__Student_Users__name']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...