Как использовать медиафайл в представлении django, другими словами, как получить адрес медиафайла в представлении

Я включил следующее в свой settings.py:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Это модель, чей FileInput я должен хранить:

class Clip(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=False)
    audio = models.FileField(upload_to='audio/')

    class Meta:
        db_table = 'Audio_store'

Моя модельФорма:

class AudioForm(forms.ModelForm):
    class Meta:
        model = Clip
        fields = ['audio']

И наконец, вид, в котором мне нужен адрес этого файла:

        form = AudioForm(request.POST, request.FILES or None)
        try:
            instance = Clip.objects.get(owner=request.user)
            instance.delete()
        except Clip.DoesNotExist:
            instance = 0
        if form.is_valid():
            instance = form.save()
        else:
            return HttpResponse("Failed")
        result = function_name("""destination of the audio file in media directory""")

Теперь, как вы видите, чтобы получить значение результата, мне нужно передать адрес файла в функцию. Теперь я в замешательстве, что я должен поместить в функцию.

У меня есть каталог media, в котором я создал подкаталог 'audio'. Но я не могу понять, как мне вставить точный адрес с именем файла в эту функцию. (Это единственный способ, которым я могу использовать эту функцию)

Пожалуйста, помогите мне

Редактирование: Вот как я принимаю ввод пользователя:

<form method="POST" action="{% url 'application:audio' %}">
                        {% csrf_token %}
                        {{ form | crispy }}
                        <br>
                        {% if form.errors %}
                      {% for field in form %}
                          {% for error in field.errors %}
                              <div class="alert alert-danger">
                                  <strong>{{ error|escape }}</strong>
                              </div>
                          {% endfor %}
                      {% endfor %}
                      {% for error in form.non_field_errors %}
                          <div class="alert alert-danger">
                              <strong>{{ error|escape }}</strong>
                          </div>
                      {% endfor %}
                  {% endif %}
                  <br>
                        <input type="submit" class="btn btn-primary mt-3 mb-3 btn-register" value="Upload and Connect!!" />
                      </form>

В form.errors ничего не отображается, но форма никогда не проверяется. Я загружаю mp3 файл через форму

Спасибо

Вы можете получить путь audio к instance с помощью атрибута .path [Django-doc]:

instance.audio.path

если вам нужен медиа URL, вы можете использовать атрибут .url [Django-doc]:

instance.audio.url

Вы, вероятно, должны сначала проверить, не является ли instance 0, поскольку в этом случае вы не работаете с Clip моделью.

В вашей форме необходимо указать enctype="…" HTML-атрибут [dev-mozilla] в теге <form>:

<form method="POST" action="{% url 'application:audio' %}" enctype="multipart/form-data">
    …
</form>
Вернуться на верх