Получите URL-адрес файла, который я только что загрузил через форму в Django - PullRequest
1 голос
/ 11 июля 2020

У меня есть эта модель с FileField

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 отправляет сообщение в веб-сокет, содержащее URL-адрес недавно загруженного файла, чтобы сервер мог транслировать вложение другим пользователям.

Как мне получить URL-адрес только что загруженного файла? Имейте в виду, что я не могу просто создать его с помощью MEDIA_ROOT + независимо от того, что в поле upload_to написано + имя файла, например, если загружены два файла с одинаковым именем, Django заполнит второй файл несколькими символами в конце имени.

1 Ответ

0 голосов
/ 11 июля 2020

если у вас есть объект в django, вы можете сделать

attachment.file.url
...