Почему я получаю ошибку целостности при загрузке файла csv в приложение django?

При загрузке файла csv я получаю ошибку целостности. У меня есть правильно работать QuizApp, который имеет модели о викторине, вопросы и ответы. Но я создал другое приложение csvs для загрузки файла csv с вопросами и ответами. Когда я пытаюсь загрузить CSV файл, я получаю эту ошибку. Файл не загружен на сайт.

IntegrityError at /something/admin/csvs/csv/add/
null value in column "quiz_id" of relation "csvs_csv" violates not-null constraint
DETAIL:  Failing row contains (11, csvs/example_KLOIQJK.csv, 2022-09-15 05:46:25.666689+00, f, null)
csvs.models.py

class Csv(models.Model):
    file_name = models.FileField(upload_to="csvs")
    uploaded = models.DateTimeField(auto_now_add=True)
    activated = models.BooleanField(default=False)
csvs.forms.py
from django import forms
from csvs.models import Csv


class CsvModelForm(forms.ModelForm):
    class Meta:
        model = Csv
        fields = ("file_name",)
csvs.views.py
from django.shortcuts import render
from django.http import HttpResponse
from .forms import CsvModelForm

# Create your views here.


def upload_file_view(request):
    form = CsvModelForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        form.save()
        form = CsvModelForm()
    return render(request, "csvs/import.html", {"form": form})
quiz.models.py
from django.db import models
from django.contrib.auth import get_user_model
from django.urls import reverse, reverse_lazy
import uuid


class Quiz(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField(max_length=200)
    short_description = models.CharField(max_length=500)
    resolution_time = models.PositiveIntegerField(
        help_text="Quiz Duration in minutes", default=15
    )
    number_of_questions = models.PositiveIntegerField(default=1)
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
    )
    is_public = models.BooleanField(default=False)
    required_score_to_pass = models.IntegerField(
        help_text="Required score in %", default=50
    )

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

    def get_absolute_url(self):
        return reverse("quiz_detail", args=[str(self.id)])

    def get_absolute_url_edit(self):
        return reverse("quiz_edit", args=[str(self.id)])

    def get_absolute_url_questions_edit(self):
        return reverse("quiz_questions_edit", args=[str(self.id)])

    def get_absolute_url_delete(self):
        return reverse("quiz_delete", args=[str(self.id)])

    def get_absolute_url_my_quizes(self):
        return reverse("my_quiz")

    def get_absolute_url_answer_edit(self):
        return reverse("question_answer_edit")

    def get_absolute_url_create(self):
        return reverse("quiz_create")

    def get_absolute_url_play(self):
        return reverse("quiz_play", args=[str(self.id)])


class Question(models.Model):
    quiz = models.ForeignKey(
        Quiz,
        on_delete=models.CASCADE,
        related_name="questions",
    )
    content = models.CharField(max_length=255)
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    def __str__(self):
        return self.content


class Answer(models.Model):
    content = models.CharField(max_length=255)
    question = models.ForeignKey(
        Question,
        on_delete=models.CASCADE,
        related_name="answers",
    )
    is_correct = models.BooleanField(default=False)

    def __str__(self):
        return self.content

    def is_that_correct_answer(self):
        return self.is_correct


class Attempt(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
    score = models.SmallIntegerField(default=1)
    has_passed = models.BooleanField(default=False)
    attempt_date = models.DateTimeField(auto_now_add=True)

Есть идеи?

Похоже, что вы не загрузили всю модель CSV или не создали новые миграции, потому что модель CSV должна иметь еще одно поле - викторина. Поэтому либо запустите makemigrations для удаления викторины из CSV, либо в вашей форме добавьте викторину в поля формы

Вернуться на верх