Загрузка нескольких файлов Django

#python #django #bootstrap-4

#python #django #bootstrap-4

Вопрос:

Я надеюсь, что кто-нибудь может помочь мне с несколькими загрузками файлов. Я нашел несколько подсказок в Интернете, но с чем я борюсь, так это с отображением заголовка и файлов на одной странице. Пожалуйста, ознакомьтесь с приведенным ниже кодом, чтобы понять, чего я пытаюсь достичь: models.py

 class Uradna(models.Model):
    title = models.CharField(max_length=200)
    date = models.DateField(default=datetime.now)
    file = models.FileField(blank=True, upload_to='files/')

    class Meta:
        verbose_name_plural = 'Uradna'
 
    def __str__(self):
        return str(self.date)

class Files(models.Model):
    tabula = models.ForeignKey(Uradna, on_delete=models.CASCADE)
    title = models.CharField(max_length=200, null=True)
    files = models.FileField(upload_to='files/')

    class Meta:
        verbose_name_plural = 'Files'

    def __str__(self):
        return str(self.tabula.date)
 

views.py:

 def homePageView(request):
    posts = Uradna.objects.all().order_by('-id')[:5]
    context = {
       'posts':posts 
    }   
    return render(request, 'home.html', context)



def filesView(request, id):
    post = get_object_or_404(Uradna, id=id)
    files = Files.objects.filter(tabula=post)
    return render(request, 'home.html', 
    {'post':post, 'files':files})
 

urls.py

 urlpatterns = [
    path('', homePageView, name='home'),
    path('<int:id>', filesView, name='home_files'),

]
 

home.html

 <div class="accordion" id="accordionExample">
        {% for post in posts %}
        <div class="card mt-3">
            <div class="card-header" id="headingOne">
                <h2 class="mb-0">
                    <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse"
                        data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
                         {{ post.date }}
                    </button>
                </h2>

            </div>

            <div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
                <div class="card-body">
                    <a href="{{post.file.url}}" target="_blank">{{ post.title }}</a>                                     
                </div>
            </div>
            {% endfor %}

        </div>
    </div>
 

Я попробовал другой цикл for из внешнего ключа, но он, очевидно, не работает, поскольку urls.py хочет перенаправить на страницу идентификатора. Если бы кто-нибудь мог дать мне какие-либо подсказки, я был бы очень признателен.

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

1. что именно вы хотите сделать? у вас есть заголовок имени поля в обеих моделях.. у вас также есть filefield для Uradna . отличается ли этот файл от files model?

2. Модель файлов — это внешний ключ для Uradna, поэтому я могу загружать больше файлов. Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы все загруженные файлы отображались под одним общим заголовком, как вы можете видеть в html. Поэтому, когда я загружаю один заголовок с 3 файлами, я хочу, чтобы он отображался на одной странице. Я понятия не имею, как этого добиться.

3. у меня есть такой старый пример загрузки нескольких файлов, вы можете прочитать это github.com/idontgotit/upload-multi-file-django-angular