Почему я получаю ошибку целостности при загрузке файла 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, либо в вашей форме добавьте викторину в поля формы