Невозможно вставить данные PSOT в базу данных SQLlite3 в Django — ошибка ограничения NOT NULL

У меня есть страница с 10 вопросами и полем для комментариев. Ответы на вопросы выбираются с помощью радиокнопок, комментарий — текстовое поле. Когда я пытаюсь получить данные POST, введенные в мою базу данных SQL, я получаю ошибку:

Таблица SQL имеет 3 поля:

Имя — идентификатор от LQ1 до LQ10

Ответ — целое число от 0 до 5

Вопрос — открытый ключ, содержащий текст вопроса, на который дается ответ. Поскольку вопросы находятся в базе данных, когда я перехожу к администратору, они отображаются в раскрывающемся списке ответов.

Соответствующие фрагменты файлов:

models.py

leadership.html (одна из 10 строк):

views.py:

Возвращенные данные POST:

Таблицы SQL

Я пробовал удалить токен и комментарии из возвращаемых данных POST и выполнить get(), но это не сработало.

Я использовал pop и del, чтобы сделать это.

Я также пробовал добавлять "blank=True, null=True"

но безрезультатно.

NOT NULL constraint failed: ISO22301_answer.value
class Topic(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return f"{self.name}"


class Question(models.Model):
    question = models.CharField(max_length=200)
    name = models.CharField(max_length=20)  # THis is probably useless

    topic = models.ForeignKey(
        Topic, on_delete=models.CASCADE
    )  # Django will store this as topic_id on database

class Answer(models.Model):
    value = models.IntegerField()
    name = models.CharField(max_length=20)
    # q_id = models.CharField(max_length=10, default="XX")  # USed foreignkey instead
    question = models.ForeignKey(
        Question, on_delete=models.CASCADE
    )


    def __str__(self):
        return f"{self.question} value is {self.value}"
  <td colspan="7">Risk Assessment and Planning</td>
  <tr>
      <td class="question">Conducts annual risk assesments and identifies key risks and mitigation actions</td>
      <td>
        <input  name="LQ1" type="radio" value="1" id="LQ1_1" />1
      </td>
      <td>
        <input name="LQ1" type="radio" value="2" id="LQ1_2" />2
      </td>
      <td>
        <input name="LQ1" type="radio" value="3"  id="LQ1_3"/>3
      </td>
      <td>
        <input name="LQ1" type="radio" value="4"  id="LQ1_4"/>4
      </td>
      <td>
        <input name="LQ1" type="radio" value="5"  id="LQ1_5"/>5
    </td>
    <td>
      <input name="LQ1" type="radio" value="0"  id="LQ1_6"/>
    </td>
  </tr>
def leadership(request):
    if request.method == "POST":
        results=dict(request.POST) # get POST data from form
        print("Post", results)
        name = request.POST.get('name')
        value =  request.POST.get('value')
        answer = Answer(name=name, value=value)
        answer.save()
        # everything belwo here is just to calculate a score and render an anser page with color coding based on score
        score_comments=create_list(results) #Get tuple with (score, comments)
        score=score_comments[0]
        comments=score_comments[1]
        question_answers = []
        question_answers =  score_comments[2]
        results_color = score_color(score)
        print(score, results_color,comments, question_answers)
        #answers(results)
        context = {
            "shade": results_color
        }
        return render(request, "leadershipresults.html", context)
    else:
        return render(request, "leadership.html")

Variable        Value
csrfmiddlewaretoken 'mR6idvTRbovOc1V24ZcyJsosXaylGQx4SZ4f99BlAQ2gvJkwK7LfhxMJMYjr3bAo'
LQ1         '2'
LQ2         '2'
LQ3         '2'
LQ4         '2'
LQ5         '2'
LQ6         '2'
LQ7         '2'
LQ8         '2'
LQ9         '2'
LQ10            '2'
L_Text          'nmbvbncvbcxv'
ISO22301_answer             auth_user                 
ISO22301_area               auth_user_groups          
ISO22301_comment            auth_user_user_permissions
ISO22301_question           django_admin_log          
ISO22301_topic              django_content_type       
auth_group                  django_migrations         
auth_group_permissions      django_session            
auth_permission

sqlite> PRAGMA table_info(ISO22301_answer);
0|id|INTEGER|1||1
1|value|INTEGER|1||0
2|name|varchar(20)|1||0
3|question_id|bigint|1||0
class Answer(models.Model):
    value = models.IntegerField()
    name = models.CharField(max_length=20)
    # q_id = models.CharField(max_length=10, default="XX")  # USed foreignkey instead
    question = models.ForeignKey(
        Question, on_delete=models.CASCADE, blank=True, null=True)
София
Вопрос задан16 августа 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.