Django 프로젝트에 이미지를 업로드 할 수 없습니다. Form 객체를 가져 오는 데 'save'속성이 없습니다.

아유시 굽타

템플릿에서 입력 한 파일을 통해 이미지 파일을 업로드하려고합니다. 모든 지침을 따랐지만 파일을 첨부하고 제출을 클릭하면이 오류가 발생합니다.

AttributeError: 'PicUpForm' object has no attribute 'save'

따라서 내 이미지가 지정된 디렉토리에 업로드되지 않고 레코드가 내 sqlitedb에 삽입되지 않습니다.

다음은 내가 사용한 모든 필수 코드입니다.

views.py

def add_image(request):
    form = PicUpForm()
    if request.method == "POST":
        form = PicUpForm(data=request.POST, files=request.FILES)
    if form.is_valid():
        form.save()
        return redirect("")
    else:
        return render(request, "sample.html", {"form": form})

forms.py

class PicUpForm(forms.Form):
    class Meta:
        model = PicUpClass
        fields = [model.picture]
    picture = forms.ImageField(label='File')

models.py

def upload_to(instance, filename):
    now = timezone_now()
    base, ext = os.path.splitext(filename)
    ext = ext.lower()
    return f"C:/Users/Aayush/ev_manage/face_detector/static/img/{now:%Y/%m/%Y%m%d%H%M%S}{ext}"



class PicUpClass(models.Model):
    picture = models.ImageField(_("picture"), upload_to=upload_to, blank=True, null=True)

sample.html

{% block content %}
{% load static %}
    <form method="post" action="/picup" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form }}
        <button type="submit">submit</button>
    </form>
{% endblock %}

urls.py

...
path('picup', views.add_image, name='picup'),

또한 필요에 따라 모델을 만든 후 makemigrations 및 마이그레이션 명령을 실행했습니다. 제가 Python의 신인이고이 기능을 완료하는 것이 매우 중요하므로 저를 도와주세요.

빌렘 반 온셈

귀하는 PicUpForm것입니다 하지ModelForm 따라서 그것은을하지 않습니다, Meta전혀 고려. 필드는 문자열 목록이어야하므로 양식을 다음과 같이 다시 작성해야합니다.

class PicUpForm(forms.ModelForm):
    class Meta:
        model = PicUpClass
        fields = ['picture']

보기에서보기 redirect(..)이름 을 전달해야 하므로 다음을 참고하십시오.

def add_image(request):
    if request.method == 'POST':
        form = PicUpForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            form.save()
            return redirect('name-of-view')
    else:
        form = PicUpForm()
    return render(request, 'sample.html', {'form': form})

여기 name-of-view에서보기 이름 으로 바꿔야 합니다.

뷰에 매개 변수가 포함 된 경우이를 명명 된 매개 변수로 전달할 수 있습니다. 예를 들어 뷰에 picture_id매개 변수 가있는 경우 여기에서이를 전달할 수 있습니다 (다른 매개 변수 가있는 경우에는 물론 매개 변수의 이름을 변경해야합니다).

def add_image(request):
    if request.method == 'POST':
        form = PicUpForm(data=request.POST, files=request.FILES)
        if form.is_valid():
            picup = form.save()
            return redirect('name-of-view', picture_id=picup.pk)
    else:
        form = PicUpForm()
    return render(request, 'sample.html', {'form': form})

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관