Изображение не загружается в папку - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу загрузить изображение, но оно не отображается в папке мультимедиа.

Это шаблон HTML

<form class="form" action="/profile/edit/{{user.id}}" method="post" enctype="multipart/form-data" style="padding-top:20px;">
                        {% csrf_token %}
                        <input type="file" class="btn " name="pro_pic" accept=".png, .jpg, .jpeg">
                        <button type="submit" class="btn text-success" name="pr_pic" id="pic_submit"><i class="fas fa-check"></i> Submit</button>
                    </form>

Models.py

class UserDetails(models.Model):

    user_id = models.IntegerField(unique=True)
    bio = models.TextField(null = True)
    profession = models.CharField(max_length = 100, null = True)
    city = models.CharField(max_length = 100, null = True)
    country = models.CharField(max_length = 100, null = True)
    img = models.ImageField(upload_to='pic_user', null = True)

views.py

def edit (request, id = '') :


    if request.user.is_authenticated == True :

        if request.method == 'POST' :
        # MyModel.objects.filter(pk=some_value).update(field1='some value')

            if request.POST.get('pr_pic') == '' :

                post_image = request.FILES['pro_pic']
                # pic = UserDetails.objects.filter(user_id = id).update(img = post_image)
                # UserDetails.objects.filter(user_id = id).update(img = post_image)
                pic = UserDetails.objects.filter(user_id = id)
                pic.img = post_image
                pic.save()

Всякий раз, когда пользователь создается, его user_id обновляется в другой таблице (модель UserDetails), а поля имеют значение null.

Но в HTML есть опциязагрузить изображение позже (это показано в HTML).

Я думаю, что мои views.py неверны, пожалуйста, помогите мне исправить это

1 Ответ

0 голосов
/ 25 сентября 2019

Попробуйте:

import uuid
from PIL import Image

format_image, img_str = request.FILES['pro_pic'].split(';base64,')
file_content = ContentFile(base64.b64decode(img_str))

unique_filename = str(uuid.uuid4())
pic.img.save(unique_filename, file_content)

file_url = settings.MEDIA_FILES + '/tmp/' + unique_filename

# convert image into JPEG format and save
img = Image.open(file_url)
img.save(file_url, format='jpeg', optimize=True, quality=85)
...