11 개의 필드와 하나의 이미지 업로드 필드가있는 양식이 있습니다. 채우기 및 제출 후, 정수가 필요하다는 TypeError가 주어집니다. imagefield를 제거하면이 오류가 발생하지 않습니다. 이미지 디렉토리를 확인하면 오류가 발생하기 전에 파일이 서버에 저장됩니다.Django form.save에 "TypeError : 정수가 필요합니다"
Forms.py :
class ListingForm(ModelForm):
seller_email = forms.EmailField(max_length="", required=True, widget=forms.TextInput(attrs={'placeholder': "[email protected]"}))
title = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder':"The Cat in the Hat"}))
edition = forms.IntegerField(required=True, widget=forms.TextInput(attrs={'placeholder':"5"}))
author = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder':"Dr. Seuss"}))
isbn = forms.CharField(label="ISBN", required=True, widget=forms.TextInput(attrs={'placeholder':"9780717260591"}))
price = forms.FloatField(required=True, widget=forms.TextInput(attrs={'type':"number", 'placeholder':"50.00"}))
classcode= forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder':"MA115"}))
#description = forms.CharField(widget=forms.TextArea(attrs={'placeholder':"You should buy this because..."}))
condition = forms.ChoiceField(required=True, widget=forms.Select(), choices=([(4,"New"), (3,"Good"), (2,"Fair"), (1,"Poor")]))
seller_name = forms.CharField(required=True, widget=forms.TextInput(attrs={'placeholder':"John Doe"}))
seller_phone = forms.CharField(widget=forms.TextInput(attrs={'placeholder':"(555) 555-1234"}))
picture = forms.ImageField(widget=forms.FileInput('accept':"image/*"))
#picture = forms.ImageField()
uuid = forms.CharField(widget=forms.HiddenInput(), initial=uuid.uuid4())
timeposted = forms.CharField(widget=forms.HiddenInput(), initial=datetime.now())
sale_status = forms.BooleanField(widget=forms.HiddenInput(), initial=True)
class Meta:
model = Listing
fields = ('seller_email', 'title', 'edition', 'author', 'isbn', 'price', 'classcode', 'description', 'condition', 'seller_name', 'seller_phone', 'picture', 'uuid', 'timeposted', 'sale_status')
#exclude = ("uuid", "timeposted", "sale_status", "picture", "school")
Views.py :
Environment:
Request Method: POST
Request URL: http://alligator.collegebooktrade.info/listings/add/
Django Version: 1.4
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'cbt.accounts',
'cbt.listings')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/home/cbt/cbt/listings/views.py" in add
25. form.save()
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in save
364. fail_message, commit, construct=False)
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in save_instance
86. instance.save()
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save
463. self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save_base
551. result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in _insert
203. return insert_query(self.model, objs, fields, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in insert_query
1576. return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in execute_sql
909. for sql, params in self.as_sql():
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in as_sql
872. for obj in self.query.objs
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py" in pre_save
249. file.save(file.name, file, save=False)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py" in save
86. self.name = self.storage.save(name, content)
File "/usr/local/lib/python2.7/dist-packages/django/core/files/storage.py" in save
45. name = self._save(name, content)
File "/usr/local/lib/python2.7/dist-packages/django/core/files/storage.py" in _save
212. os.chmod(full_path, settings.FILE_UPLOAD_PERMISSIONS)
Exception Type: TypeError at /listings/add/
Exception Value: an integer is required
편집 : 요청으로 :
Model:
class Listing(models.Model):
title = models.CharField(max_length="100")
edition = models.CharField(max_length="5")
author = models.CharField(max_length="50")
isbn = models.CharField(max_length="13")
price = models.FloatField()
classcode = models.CharField(max_length="12")
description = models.CharField(max_length="400")
condition = models.CharField(max_length="10")
#school = models.OneToOneField(School)
school = models.CharField(max_length="36")
picture = models.ImageField(upload_to="listings")
#CONTACT INFO:
seller_name = models.CharField(max_length="30")
seller_phone = models.CharField(max_length="11")
seller_email = models.EmailField(max_length="75")
uuid = models.CharField(max_length="36")
timeposted = models.DateTimeField()
sale_status = models.BooleanField() #0 for sale, 1 for sold
다음
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.template import Context, loader, RequestContext
from django.contrib.auth.models import User
from cbt.accounts.models import School, UserProfile
from cbt.listings.models import Listing
from django.contrib import auth
from django.core.context_processors import csrf
from django.core.mail import send_mail
from django.core.files import File
from datetime import datetime
from cbt.settings import MEDIA_ROOT
from cbt.listings.forms import ListingForm
school_list = School.objects.all().order_by('name')
def add(request):
form = ListingForm()
if request.method == 'POST':
form = ListingForm(request.POST, request.FILES)
if form.is_valid() and form.is_multipart():
form.save()
return HttpResponseRedirect(reverse('cbt.views.home'))
return render_to_response('listings/add.html', {'school_list':school_list, 'form':form}, context_instance=RequestContext(request))
정확한 오류 코드입니다 0
Settings.py :
FILE_UPLOAD_PERMISSIONS '0760'
그것은 그것의 주위에 따옴표를하지 말았어야 : 당신의 settings.py 스크립트에서
#just including pertinent settings...
FILE_UPLOAD_PERMISSIONS '0760'
FILE_UPLOAD_HANDLERS ('django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler')
MIDDLEWARE_CLASSES ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware')
FILE_UPLOAD_MAX_MEMORY_SIZE '2621440'
이미지 필드에 upload_to 속성을 올바르게 설정 했습니까? 디렉토리가 올바른 권한으로 존재합니까? 이 예외는 설정의 가치가 무엇이든 거의 확실하게 발생합니다 .FILE_UPLOAD_PERMISSIONS가 있습니다. 모델 및 해당 필드의 구성을 포함하면 도움이됩니다. – BenTrofatter