본문 바로가기

프로그래밍/Django개발(MAC OS)

django 이미지 폼 업로드 실패 해결

반응형

 

Moel form을 사용하여 image field를 업로드했는데 안된다...

아무리 찾아도 업로드가 안된다. 

 

분명 modeform을 활용하여

제네릭뷰 Create를 사용했음에도 불구하고 되질 않는다..

 

이 문제는 아래 예시를 보면서 해결하면 된다.

 

1. 모델 설계

 - 모델에서는 ImageField로 잘 설계해두었다.

class ExampleModel(models.Model):
    model_pic = models.ImageField(upload_to = 'pic_folder/', default = 'pic_folder/None/no-img.jpg')

 

 

2. forms.py

여기서 image form을 사용해서 그대로 적용을 하면된다.

class ImageUploadForm(forms.Form):
    """Image upload form."""
    image = forms.ImageField()

 

3. Views.py

아래 예제는 함수형 뷰를 사용했지만, 클래스형뷰도 똑같이 적용된다고 보면된다.

form = ImageUploadForam(request.POST, request.FILES)를 선언하고

이미지 값을 받아오면 된다.

아래 예제처럼Clean Data까지 가지 않더라고 클래스 형 뷰에서는 쉽게 구현이 가능하다.

def upload_pic(request):
    if request.method == 'POST':
        form = ImageUploadForm(request.POST, request.FILES)
        if form.is_valid():
            m = ExampleModel.objects.get(pk=course_id)
            m.model_pic = form.cleaned_data['image']
            m.save()
            return HttpResponse('image upload success')
    return HttpResponseForbidden('allowed only via POST')​

 

 

4. template

아래 Form을 보면 별게 없다.

그냥 form태그 내에서 submit으로 제출하기만 하면된다.

다만!!

 

여기서 핵심은 enctype="multipart/form-data"

 이 놈을 꼭 설정해주어야 합니다!!! 내 30분...

<form action="{% url upload_pic %}" method="post" enctype="multipart/form-data">{% csrf_token %}
    <p>
        <input id="id_image" type="file" class="" name="image">
    </p>
    <input type="submit" value="Submit" />
</form>

 

 

값이 잘 저장 됩니다~^^

 

즐거운 코딩하세요

 

 

반응형