템플릿에서 입력 한 파일을 통해 이미지 파일을 업로드하려고합니다. 모든 지침을 따랐지만 파일을 첨부하고 제출을 클릭하면이 오류가 발생합니다.
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] 삭제
몇 마디 만하겠습니다