Django-filer получает абсолютный URL и Django Celery Upload

Можно ли получить абсолютный URL-адрес файла, только что загруженного с помощью Django Filer?

Моя проблема заключается в следующем:

Я использую Django Filer для загрузки музыки. Затем я хочу отправить этот файл в Django Celery для загрузки в Mixcloud, используя их API. Но..

Я не могу понять, как получить URL-адрес файла. Я не использую представления, я хочу просто использовать администратора, получить только что загруженный файл и отправить в Celery для загрузки в Mixcloud с помощью их API. Но я могу только импортировать объект из модели в сельдерей.

Моя модель:

class MixcloudUpload(models.Model):
    files = FilerFileField(null=True, blank=True)
    data = {'name': 'API Test'}


    def save(self, *args, **kwargs):

        super(MixcloudUpload, self).save(*args, **kwargs)
        from .tasks import uploadtask
        uploadtask.delay(self.id)

Моя задача:

@celery_app.task()
def uploadtask(request):
    sleep(5)
    # Update the state. The meta data is available in task.info dicttionary
    # The meta data is useful to store relevant information to the task
    # Here we are storing the upload progress in the meta.
    post_url = 'https://api.mixcloud.com/upload/?access_token=ugY'
    from .models import MixcloudUpload
    mp3 = MixcloudUpload.files
    data = MixcloudUpload.data
    files = ({'mp3': open(mp3)})
    headers = {'enctype': 'multipart/form-data'}
    r = requests.post(post_url, headers=headers, files=files, data=data, verify=True)
    return r, r.json(), request

1 ответ

Решение

Джанго Филер устанавливает uploaded_at (поле даты и времени) атрибут модели при загрузке. Вы можете отфильтровать это, чтобы получать новые загрузки для пересылки в Mixcloud.

Что касается получения абсолютного URL. В этом отношении документация на файлера немного сложна. Но есть два атрибута, которые вы можете использовать:

  • File.objects.all()[0].path, это путь к файлу в файловой системе.
  • File.objects.all()[0].urlURL-путь после домена, например: /media/filer_public/23/23/34565b67-e1de-41da-3132-1403c335fdd4/test_img.png/, Вы должны добавить свой домен самостоятельно. Таким образом, полный путь будет примерно таким: "http" + urlencode(site_obj.domain) + filer_obj.url,
Другие вопросы по тегам