获取我刚刚通过Django中的表单上传的文件的URL
我有一个带有文件字段的模型获取我刚刚通过Django中的表单上传的文件的URL,django,file-upload,Django,File Upload,我有一个带有文件字段的模型 class Attachment(models.Model): file = models.FileField(upload_to='%Y/%m/%d/') timestamp = models.DateTimeField(default=timezone.now) 上载是使用此表单完成的 class AttachmentForm(ModelForm): class Meta: model = Attachment
class Attachment(models.Model):
file = models.FileField(upload_to='%Y/%m/%d/')
timestamp = models.DateTimeField(default=timezone.now)
上载是使用此表单完成的
class AttachmentForm(ModelForm):
class Meta:
model = Attachment
fields = ['file']
这是js
function upload(event) {
event.preventDefault()
var data = new FormData($('#attachment_form').get(0))
$.ajax({
url: $(this).attr('action'),
type: $(this).attr('method'),
data: data,
cache: false,
processData: false,
contentType: false,
})
$('#id_file').val('')
// send message to server
chatSocket.send(
JSON.stringify({
command: 'send',
room: currentRoom,
// message: ??
})
)
return false
}
$(function () {
$('#attachment_form').submit(upload)
})
视图的这一部分处理表单
# form to upload attachments
if request.method == 'POST':
attachment_form = AttachmentForm(request.POST, request.FILES)
if attachment_form.is_valid():
# file is saved
attachment_form.save()
else:
attachment_form = AttachmentForm()
我在实时聊天应用程序中使用此表单。我想要的是:用户上传一个文件,然后javascript将向websocket发送一条包含新上传文件URL的消息,这样服务器就可以向其他用户广播附件
如何获取刚上传的文件的URL?请记住,我不能仅使用
MEDIA\u ROOT
+构建它,无论upload\u to
字段显示的是什么+文件名,例如,如果上载了两个同名文件,Django将在第二个文件的名称末尾填充几个字符。如果对象位于Django中
你能行
attachment.file.url
如果对象在django中
你能行
attachment.file.url
您有处理文件上传/表单发布的视图吗?是的,谢谢您指出。我更新了我的帖子,有什么问题吗?由于Django更改了同一目录中同名文件的名称,它也会将其与子目录一起保存在数据库中?我个人会将upload_to构造为一个固定字符串,然后在上传之前,将子目录作为动态生成的部分添加到fliename。我仍然不明白如何获取文件路径。您有处理文件上传/表单发布的视图吗?是的,谢谢您指出。我更新了我的帖子,有什么问题吗?由于Django更改了同一目录中同名文件的名称,它也会将其与子目录一起保存在数据库中?我个人会将upload_to构造为一个固定字符串,然后在上传之前,将子目录作为动态生成的部分添加到fliename。我仍然不知道如何获取文件的路径。我只能通过请求访问上传的文件。文件上传文件后,您将已将其保存在对象中,对吗?附件是确定的。我怎么找到那个东西?通过调用表单上的save()
,将文件保存到数据库中。您不直接引用对象。您可以始终执行obj=attachment_form.save(),因此您将获得在objas@BrankoRadojevic中保存对象的引用,然后使用obj.file.url获取url。我只能通过request.FILES
访问上载的文件。上载文件后,您将其保存在对象中,对吗?附件是确定的。我怎么找到那个东西?通过调用表单上的save()
,将文件保存到数据库中。您不直接引用对象。您可以始终执行obj=attachment_form.save(),这样您将在objas@BrankoRadojevic中获得保存对象的引用,然后使用obj.file.url获取url