Ограничение количества изображений, которые может загрузить пользователь

На моем сайте есть функция блога, пользователи могут загружать одно главное изображение и несколько вспомогательных изображений. Проблема, с которой я столкнулся, заключается в том, что я хочу иметь возможность ограничить количество изображений, которые может загрузить пользователь. Я понимаю, что могу использовать цикл for, но если пользователь вернется позже и добавит еще, то цикл for станет бесполезным. Поэтому я решил, что лучший способ сделать это - добавить в модель поле, которое будет подсчитывать количество загруженных изображений, а затем я смогу использовать оператор if для проверки, было ли загружено больше указанного количества изображений. Как я могу получить количество изображений и добавить их в пост во время его создания? Или я должен сделать это другим способом

view

    @login_required
def createPostView(request):

    currentUser = request.user
    postForm = PostForm()
    if request.method == 'POST':
        postForm = PostForm(request.POST, request.FILES)
        if postForm.is_valid():
            PostFormID = postForm.save(commit=False)
            PostFormID.author = request.user
            PostFormID.save()                   
            
            for f in request.FILES.getlist('images'):          
                test = PostImagesForm(request.POST, request.FILES)
                if test.is_valid():
                    instance = test.save(commit=False)
                    instance.post_id = PostFormID.id
                    instance.images = f
                    instance.save()   
            return HttpResponseRedirect("/")
               
    return render(request, 'blog/post_form.html', {'postForm': postForm, 'PostImagesForm':PostImagesForm})

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

len(request.FILES.getlist('images'))
>>> 10

Так что что-то вроде:

if len(request.FILES.getlist('images')) > 3:
    raise Exception("Only three images allowed")
else:
   // process the images in the for loop
Вернуться на верх