Как сделать словарь новой записи в качестве новой строки таблицы в Django? - PullRequest
0 голосов
/ 17 июня 2019

Мне трудно реализовать что-то, что вначале казалось довольно простым.Точнее, я хочу загрузить файл в папку и переименовать его.После переименования я хочу отобразить строку в таблице, которая содержит 3 столбца.В первом столбце должно отображаться старое имя файла, во втором столбце должно отображаться новое имя файла, а затем в третьем столбце должна отображаться кнопка загрузки.Я хочу, чтобы таблица отображала это для каждого загружаемого файла (например, если я загрузил 5 файлов, я хочу увидеть 5 строк в таблице) Это мое представление upload_file:

def upload_file(request):
  filedict = {}
    oldname = ""
    newname = ""
    if request.method == 'POST':
        uploaded_file = request.FILES['document']
        fs=FileSystemStorage()
        oldname = fs.save(uploaded_file.name,uploaded_file)
        newname = "new"+oldname
    global counter
    filedict['counter'] = { 'oldname': oldname, 'newname' : newname }
    counter+=1
    return render(request, 'files/renamefiles.html',{'names': 
   filedict})

, и этотаблица в моем шаблоне renamefiles.html:

<div class="mt-5">
<table class="table table-hover">
 <thead>
    <tr>
        <th scope="col">Source File</th>
        <th scope="col">Renamed File</th>
        <th scope="col">Action</th>
    </tr>
 </thead>
  <tbody>
      <tr>
        {% for key, entry in dictionary.items %}
           {% for key2, data in entry.items %}
            <th id="filedata">{{data}}</th>
           {% endfor%}
        {% endfor%}
        <th><a class="btn btn-sm btncolor">Download File</a></th>
      </tr>
  </tbody>
 </table>
</div>

Несмотря на это, при загрузке страницы я вижу кнопку загрузки в первом столбце (столбец Source File), и при загрузке файла ничего не происходит.оказаны.У кого-нибудь есть идеи относительно того, как я мог бы решить эту проблему?Я ценю любую помощь, которую вы можете оказать

1 Ответ

0 голосов
/ 17 июня 2019

Вам нужна дополнительная модель и записи в базе данных для каждого загруженного файла.Таким образом, вы также будете иметь записи в таблице даже после перезапуска сервера (словарь находится только в ОЗУ).

Создайте такую ​​модель:

class UploadedFile(Model):
    file = FileField(...)
    orig_filename = CharField(max_length=500)

Вызатем вы можете использовать ModelForm в своем представлении или создать объект модели, не изменяя большую часть существующего кода.

Вместо использования словаря для визуализации таблицы, вы должны использовать обычный ListView на основе этой модели.

Эта часть документации должна помочь вам начать: https://docs.djangoproject.com/en/2.2/topics/http/file-uploads/#handling-uploaded-files-with-a-model

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...