Получение NOT NULL CONSTRAINT из обоих представлений с помощью django
У меня есть приложение, которое отображает папку, а также позволяет создать вложенную папку в этой папке. Как в папку, так и в подпапку можно загружать файлы. Всякий раз, когда я пытаюсь это сделать, я получаю ошибку NOT NULL CONSTRAINT. Если я пытаюсь загрузить файл в родительскую папку, я получаю NOT NULL constraint failed: documents_document.subfolder_id
, а если я пытаюсь загрузить файл во вложенную папку, я получаю NOT NULL constraint failed: documents_document.folder_id
.
детальный вид родительской папки
@login_required
@group_required('Document Supervisor')
def folder_detail(request, pk):
folder = Folder.objects.get(id=pk)
documents = Document.objects.filter(folder=folder)
form = DocumentForm()
subfolders = SubFolder.objects.filter(folder=folder)
if request.method == "POST":
form = DocumentForm(data=request.POST or None, files=request.FILES or None)
if form.is_valid():
form = form.save(commit=False)
form.folder = folder
form.created_by = request.user
form.name = str(form.file.url)
form.name = form.name.replace("/media/", "")
form.save()
messages.success(request, "Document added successfully!")
return redirect(f"/documents/folder/{folder.id}")
context = {
"folder": folder,
"documents": documents,
"form": form,
"subfolders": subfolders,
}
return render(request, "documents/folder_detail.html", context)
просмотр подпапок
@login_required
@group_required('Document Supervisor')
def subfolder_detail(request, pk):
sub = SubFolder.objects.get(id=pk)
documents = Document.objects.filter()
form = DocumentForm()
if request.method == "POST":
form = DocumentForm(data=request.POST or None, files=request.FILES or None)
if form.is_valid():
form = form.save(commit=False)
form.sub = sub
form.created_by = request.user
form.name = str(form.file.url)
form.name = form.name.replace("/media/", "")
form.save()
messages.success(request, "Document added successfully!")
return redirect(f"/documents/subfolder_detail/{sub.id}")
context = {
"sub": sub,
"documents": documents,
"form": form,
}
return render(request, "documents/subfolder_detail.html", context)
Модели
class Folder(models.Model):
created_date = models.DateTimeField(auto_now_add=True, auto_now=False, blank=True, null=True)
created_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='cb_user_fold')
name = models.CharField(max_length=255, blank=True, null=True, unique=True)
updated_date = models.DateTimeField(auto_now_add=False, auto_now=True, null=True, blank=True)
updated_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='ub_user_fold')
def __str__(self):
return self.name
class SubFolder(models.Model):
created_date = models.DateTimeField(auto_now_add=True, auto_now=False, blank=True, null=True)
created_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='cb_sub')
name = models.CharField(max_length=255)
folder = models.ForeignKey(Folder, on_delete=models.CASCADE)
updated_date = models.DateTimeField(auto_now_add=False, auto_now=True, null=True, blank=True)
updated_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='ub_sub')
def __str__(self):
return self.name
class Document(models.Model):
created_date = models.DateTimeField(auto_now_add=True, auto_now=False, blank=True, null=True)
created_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='cb_user_doc')
name = models.CharField(max_length=255, blank=True, null=True)
file = models.FileField(upload_to='documents/', blank=True, null=True)
folder = models.ForeignKey(Folder, on_delete=models.CASCADE)
subfolder = models.ForeignKey(SubFolder, on_delete=models.CASCADE)
updated_date = models.DateTimeField(auto_now_add=False, auto_now=True, null=True, blank=True)
updated_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='ub_user_doc')
@property
def extension(self):
word_list = ['.doc', '.pages', '.docx', '.odt', 'txt']
image_list = ['.png', '.jpg', '.jpeg']
spreadsheet_list = ['.xls', '.csv', '.xlsx', '.odf']
pdf_list = ['.pdf']
name = os.path.splitext(self.name)
ext = name[1]
return name[1]
def __str__(self):
return self.name