用输入的参数字段值注释函数



我有一个模型

class Audiopart(models.Model):
book_id = models.ForeignKey(Audiobook, on_delete=models.CASCADE)
part_title = models.CharField(max_length = 255)
part_text = models.TextField(blank = True, null=True)
part_reader = models.CharField(max_length = 255)
filename = models.FileField(upload_to=get_upload_path, blank=True)

具有功能

def get_upload_path(instance, filename):
return os.path.join(
'audio',
instance.book_id.folder,
filename
)

我想上传目录中的文件,只保存在数据库中的文件名(没有路径(。但没有找到任何方法。

所以,我做了一个清理文件名的函数

def clear_filename(_filename):
if '/' in _filename:
_filename = _filename.split('/')[2]
return _filename

如何使用已清理的文件名打印视图中的对象?

def audioparts(request, _book_id):
all_audioparts = list(Audiopart.objects.filter(book_id=_book_id, published=True).values())
return JsonResponse(all_audioparts, safe=False)

首先,您不了解FileField是什么。它实际上是用于存储和访问文件本身。因此,您的字段不应称为filename,而应称为fileaudio_file或描述文件的内容。

因此,当您有一个AudioPart的实例,例如part时,您实际上可以直接访问该文件:part.filename是代码中的文件,而不是其名称。

如果您想要一个只访问文件名的方法,请在您的模型上定义一个@property

import os
class AudioPart(Model):
file = FileField(...)
...
@property
def filename(self):
return os.path.basename(self.file.name)

则CCD_ 9是文件并且CCD_。通过这种方式,您可以read()文件或返回其url,以便人们可以下载它(part.file.url(或以其他方式操作它。

在您的视图中,您可以在返回JSON之前循环文件,将文件名添加到列表中。

最新更新