django получает имя файла из загруженного файла с помощью formset

#python #django #django-forms

#python #django #django-формы

Вопрос:

Я пытаюсь получить имя файла загруженного файла, используя formsets.

views.py

 ...
    elif request.method == 'POST':
        albumform = AlbumForm(request.POST)
        photoformset = PhotoFormSet(request.POST, request.FILES)

        if albumform.is_valid() and photoformset.is_valid():
            album = albumform.save(commit=False)
            album.user = request.user
            album.save()

            for photoform in photoformset:
                if photoform.is_valid() and photoform.has_changed():
                # here is where I'm lost
  

forms.py

 ...
class AlbumForm(forms.ModelForm):
    class Meta:
        model = Album
        fields = ('title', 'description')

PhotoFormSet = modelformset_factory(
    Photo,
    fields=('photo',),
    extra=4
)
  

photoform['photo'] не дает мне имя файла напрямую, скорее что-то вроде

<input type="file" name="form-0-photo" accept="image/*" id="id_form-0-photo">

который не указан filename

Я пытался

 photo = photoform.save(commit=False)
print(vars(photo))
{'_state': <django.db.models.base.ModelState object at 0x000001F6326132E8>, 'id': None, 'album_id': 105, 'name': '', 'photo': <ImageFieldFile: phone.png>, 'photo_width': 600, 'photo_height': 416, 'thumbnail': '', 'status': '1'}
  

и я вижу там имя, но должен быть более простой способ добраться до него.

Комментарии:

1. вы пробовали print(photoform.photo.name) ?

2. с помощью print(photoform.photo.name) я получаю AttributeError: 'PhotoForm' object has no attribute 'photo' … с print(photoform['photo'].name) я получаю photo

Ответ №1:

В итоге сработало print(photoform.cleaned_data.get('photo').name)