반응형
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>
값이 잘 저장 됩니다~^^
즐거운 코딩하세요
반응형
'프로그래밍 > Django개발(MAC OS)' 카테고리의 다른 글
Django 설치한 모듈 (종속 파일) 추가 방법 (0) | 2020.01.18 |
---|---|
Django Google Email 전송 에러 배포 후 (0) | 2020.01.14 |
[Django] Tag List로 불러온 데이터를 보여주기 (0) | 2020.01.06 |
Django Admin 페이지에 이미지 Url 표시하기 (0) | 2020.01.05 |
HTML 확인창 띄우는 방법 (0) | 2020.01.04 |