Получение ошибки TypeError at / results Неподдерживаемый тип в записи () - PullRequest
0 голосов
/ 28 марта 2020

файл views.py здесь я получаю сообщение об ошибке, когда пытаюсь отправить свой выбор радиокнопок, каждая кнопка имеет свое значение от 1 до 5. Первоначально в списке не было словарей только внутри элементов списка строкового типа. Как мне исправить Эта проблема? Я получаю эту ошибку, когда нажимаю submit TypeError at / results Неподдерживаемый тип в write ()

import os
import xlsxwriter
from django.shortcuts import render, redirect
from psych_test_demo.settings import BASE_DIR

questions = [
    {
        'description': '1. Šiame puslapyje surašyti žodžiai apibūdina skirtingus jausmus ir emocijas. Perskaitykite '
                       'kiekvieną žodįir pažymėkite, kaip dažniausiai jaučiatės, t.y. ne kaip Jūs šiandien jaučiatės, '
                       'bet kaip jūs apskritai esatelinkęs jaustis.',
        'option_names': ['Visiškai ne arba labai mažai', 'Nelabai', 'Vidutiniškai', 'Gana labai', 'Labai daug'],
        'quiz_questions': [
            '1. Susidomėjęs',
            '2. Stiprus',
            '3. Pilnas įkvėpimo',
            '4. Energingas',
            '5. Judrus',
            '6. Veiklus',
            '7. Išdidus',
            '8. Entuziastingas',
            '9. Ryžtingas',
            '10. Atidus',
            '11. Bijantis',
            '12. Prislėgtas',
            '13. Kaltas',
            '14. Neramus',
            '15. Kenčiantis',
            '16. Nervingas',
            '17. Priešiškas',
            '18. Susigėdęs',
            '19. Irzlus',
            '20. Išsigandęs'
        ]
    },
    {
        'description': '2. Kiek, interviuojant virtualius vaikų avatarus, pojūtis, kad prieš Jus realūs vaikai?',
        'option_names': ['Visiškai ne arba labai mažai', 'Nelabai', 'Vidutiniškai', 'Gana labai', 'Labai daug'],
        'quiz_questions': [
            'Realumo pojūtis'
        ]
    },
    {
        'description': '3. Jei jautėte kurį nors iš žemiau išvardintų jausmų, pažymėkite labiausiai tinkantį.',
        'option_names': ['Visiškai ne arba labai mažai', 'Nelabai', 'Vidutiniškai', 'Gana labai', 'Labai daug'],
        'quiz_questions': [
            'Liūdesys',
            'Pyktis',
            'Pasišlykštėjimas',
            'Nuostaba',
            'Palengvėjimas']
    }
]


def show_questions(request):
    return render(request, 'questions.html',
                  context={
                      'title': 'Emotion test',
                      'questions': questions,
                  })


def generate_file(request):
    # Form is submitted via post method:
    if request.method == 'POST':

        results_dir = os.path.join(BASE_DIR, 'results')
        if not os.path.exists(results_dir):
            os.mkdir(results_dir)
        file_path = os.path.join(results_dir, '{}-results.xlsx'.format(request.POST['username']))

        answers = [int(request.POST.get('question_{}'.format(i))) for i in range(len(questions))]
        results = list(zip(questions, answers))

        # Define worksheet and workbook:
        workbook = xlsxwriter.Workbook(file_path)
        worksheet = workbook.add_worksheet()
        # Define header:
        worksheet.write(0, 0, 'Question')
        worksheet.write(0, 1, 'Answer')
        # Write data to columns:
        for i in range(len(results)):
            worksheet.write(i + 1, 0, results[i][0])
            worksheet.write_number(i + 1, 1, results[i][1])
        workbook.close()

        return render(request, 'results.html',
                      context={
                          'title': 'Quiz results',
                          'file': file_path
                      })
    # If url is accessed without post data, redirect to questions page:
    return redirect('questions')

questions. html файл здесь работает нормально, но при нажатии кнопок в словарях quiz_questions слов из других словари распаковываются. Нужно ли создавать их под разными именами? И не повлияет ли это на то, как они печатаются в файл Excel?

{% extends 'base.html' %}
{% block content %}
    <h1 class="mt-5">Emotion test</h1>
    <form class="mt-5" method="post" action="{% url 'results' %}">
        {% csrf_token %}
        <div class="form-group row">
            <label for="inputName" class="col-sm-2 col-form-label">Name</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" id="inputName" name="username" required>
            </div>

            <table class="table table-bordered mt-3">
                <thead></thead>
                <tbody>
                {% for question in questions %}
                            <th colspan="6">
                                <p>{{ question.description }}</p>
                            </th>

                                <thead>
                                <th>

                                </th>
                                {% for options in question.option_names %}
                                    <th>
                                        {{ options }}
                                    </th>
                                {% endfor %}
            <tr>
                    <th scope="col">Question</th>
                    <th>1</th>
                    <th>2</th>
                    <th>3</th>
                    <th>4</th>
                    <th>5</th>
                </tr>
                                    </thead>
                                    <tbody>
                {% for question in question.quiz_questions %}
                    <tr>
                        <th scope="row">{{ question }}</th>
                        <td><input type="radio" name="question_{{ forloop.counter0 }}" value="1" required></td>
                        <td><input type="radio" name="question_{{ forloop.counter0 }}" value="2"></td>
                        <td><input type="radio" name="question_{{ forloop.counter0 }}" value="3"></td>
                        <td><input type="radio" name="question_{{ forloop.counter0 }}" value="4"></td>
                        <td><input type="radio" name="question_{{ forloop.counter0 }}" value="5"></td>
                <tr>
                {% endfor %}

                </tbody>


                        {% endfor %}


            </table>
            <div class="form-group-row">
                <input class="btn btn-lg btn-info" type="submit">
                <input class="btn btn-lg btn-danger" type="reset">
            </div>
    </form>
{% endblock %}

1 Ответ

0 голосов
/ 28 марта 2020

Вы можете использовать эту форму, если вам нравится

def testCode(request):
    questions = [
        {
            'description': 'Programming stuff',
            'option_names': ['Disagree', 'Not sure', 'Agree'],
            'quiz_questions': [
                'I like python',
                'I like Java'
            ]
        },
        {
            'description': 'Country stuff',
            'option_names': ['Hell no', 'No', 'Don\'t care', 'Yes', 'Hell yes'],
            'quiz_questions': [
                'Australia exists',
                'My backyard is a sovereign country'
            ]
        }
    ]
    return render(request, 'page-login.html', {'questions': questions})
                        <div class="table-stats order-table ov-h">
                        {% for question in questions %}
                            <div>
                                <p>{{ question.description }}</p>
                            </div>
                            <table class="table ">
                                <thead>
                                <th>
                                    Questions
                                </th>
                                {% for options in question.option_names %}
                                    <th>
                                        {{ options }}
                                    </th>
                                {% endfor %}
                                    </thead>
                                    <tbody>
                                        {% for question_name in question.quiz_questions %}
                                        <tr>
                                            <td>
                                                {{ question_name }}
                                            </td>
                                        {% for option_radio in question.option_names %}
                                            <td>
                                                <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
                                            </td>
                                        {% endfor %}
                                                                                {% endfor %}
                                        </tr>
                                </tbody>
                            </table>

                        {% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...