首页 > 解决方案 > Django 属性错误:“NoneType”对象没有属性“videofile”

问题描述

我正在按照教程在我的 Django 项目中创建视频上传器并遇到此错误:

..src/video/views.py",第 9 行,在 showvideo videofile= lastvideo.videofile AttributeError: 'NoneType' object has no attribute 'videofile'

我确定我遗漏了一些明显的东西,并且一直在寻找答案。将不胜感激任何帮助。

views.py

from django.shortcuts import render
from .models import VideoUpload
from .forms import VideoForm

def showvideo(request):

    lastvideo= VideoUpload.objects.last()

    videofile= lastvideo.videofile


    form= VideoForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        form.save()


    context= {'videofile': videofile,
              'form': form
              }


    return render(request, 'video.html', context)
forms.py

from django import forms
from .models import VideoUpload


class VideoForm(forms.ModelForm):

    class Meta:
        model = VideoUpload
        fields = ["name", "videofile"]
models.py

from django.db import models

class VideoUpload(models.Model):
    name= models.CharField(max_length=500)
    videofile= models.FileField(upload_to='videos/', null=True, verbose_name="")

    def __str__(self):
        return self.name + ": " + str(self.videofile)
from django.conf import settings 
from django.contrib import admin
from django.urls import path
from django.conf.urls.static import static

from video.views import (
    showvideo,
)

urlpatterns = [
    path('showvideo', showvideo, name='showvideo'),
]

if settings.DEBUG:
 urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

仅供参考,我将模型的名称更新为“VideoUpload”而不是教程。

标签: pythondjango

解决方案


您的数据库中没有 last_video 记录。为了防止这种情况出现错误,您可以将以下行更改为videofile= lastvideo.videofile

videofile = lastvideo.videofile if lastvideo else None

这将防止抛出错误。或者,您可以将整个位放在 try/except 块中。


推荐阅读