Python 如何在django restfull api中使用用户名和id创建存储文件夹
我有一个用户上传的视频文件,我想使用上传文件的名称和id在media/Smat/name/id目录中创建一个单独的文件夹 model.pyPython 如何在django restfull api中使用用户名和id创建存储文件夹,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个用户上传的视频文件,我想使用上传文件的名称和id在media/Smat/name/id目录中创建一个单独的文件夹 model.py from django.db import models from datetime import datetime import cv2 import tempfile # from .utils import get_uploaded_video from django.utils import timezone import os def uploa
from django.db import models
from datetime import datetime
import cv2
import tempfile
# from .utils import get_uploaded_video
from django.utils import timezone
import os
def upload_to(instance, filename):
now = timezone.now()
base, extension = os.path.splitext(filename.lower())
return f"Smat/{now:%Y-%m-%d}"
class MyVideo(models.Model):
name= models.CharField(max_length=500)
date = models.DateTimeField(auto_now_add=True)
videofile= models.FileField(upload_to=upload_to, null=True, verbose_name="")
def __str__(self):
return self.name + ": " + str(self.videofile)
from rest_framework import serializers
from .models import MyVideo
from django.contrib.auth.models import User
class MyVideoSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyVideo
fields = fields = ['id', 'url', 'name', 'date', 'videofile']
class UploadVideoSerializer(serializers.ModelSerializer):
class Meta:
model = MyVideo
fields = ['videofile']
seriliazer.py
from django.db import models
from datetime import datetime
import cv2
import tempfile
# from .utils import get_uploaded_video
from django.utils import timezone
import os
def upload_to(instance, filename):
now = timezone.now()
base, extension = os.path.splitext(filename.lower())
return f"Smat/{now:%Y-%m-%d}"
class MyVideo(models.Model):
name= models.CharField(max_length=500)
date = models.DateTimeField(auto_now_add=True)
videofile= models.FileField(upload_to=upload_to, null=True, verbose_name="")
def __str__(self):
return self.name + ": " + str(self.videofile)
from rest_framework import serializers
from .models import MyVideo
from django.contrib.auth.models import User
class MyVideoSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyVideo
fields = fields = ['id', 'url', 'name', 'date', 'videofile']
class UploadVideoSerializer(serializers.ModelSerializer):
class Meta:
model = MyVideo
fields = ['videofile']
这可以通过将
upload\u to
功能更改为
导入日历
导入时间
def upload_到(实例,文件名):
ts=calendar.timegm(time.gmtime())
filepath=f“Smat/{ts}”
例如:
filepath=f“Smat/{instance.name}/{instance.id}”
base,扩展名=os.path.splitext(filename.lower())
返回文件路径
在MyVideo实例之前保存视频文件。因此,我可以通过将储蓄分为两个阶段来解决这个问题:
第一部分只是检查是否缺少pk,如果有,则将videofile实例设置为None
第二部分只是在将字段保存到模型之前检查pk
有关insite的更多信息,请参阅此链接
对于
实例.id
,我得到一个None。我想原因是因为我在模型中没有id
作为字段如果您在模型中更改了pk字段,那么如果仍然出现错误,请使用pk字段,打印实例
并显示输出我不明白您在my Model中更改pk字段是什么意思只需在upload_中打印实例
,即可运行并显示结果