获取我刚刚通过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