이미지를 업로드하면 내 프로젝트에서 두 번 업로드 된 것을 확인할 수 있습니다. 두 위치는 /Users/myproject/media/
및 /Users/myproject/media/assets/uploaded_files/username/
입니다. 이미지가 후자에게만 업로드되기를 기대합니다. 왜 두 권의 사본이 업로드되고 그것을 피하는가? 여기 settings.py:
장고에 이미지를 업로드 할 때마다 두 장의 이미지가 저장됩니까?
MEDIA_URL="/media/"
MEDIA_ROOT = '/Users/myproject/media/'
에서
는
UPLOAD_FILE_PATTERN="assets/uploaded_files/%s/%s_%s"
def get_upload_file_name(instance, filename):
date_str=datetime.now().strftime("%Y/%m/%d").replace('/','_')
return UPLOAD_FILE_PATTERN % (instance.user.username,date_str,filename)
class Item(models.Model):
user=models.ForeignKey(User)
price=models.DecimalField(max_digits=8,decimal_places=2)
image=models.ImageField(upload_to=get_upload_file_name, blank=True)
description=models.TextField(blank=True)
편집 models.py입니다 : 내가 formwizards을 사용하고 .
class MyWizard(SessionWizardView):
template_name = "wizard_form.html"
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT))
#if you are uploading files you need to set FileSystemStorage
def done(self, form_list, **kwargs):
for form in form_list:
print form.initial
if not self.request.user.is_authenticated():
raise Http404
id = form_list[0].cleaned_data['id']
try:
item = Item.objects.get(pk=id)
print item
instance = item
except:
item = None
instance = None
if item and item.user != self.request.user:
print "about to raise 404"
raise Http404
if not item:
instance = Item()
for form in form_list:
for field, value in form.cleaned_data.iteritems():
setattr(instance, field, value)
instance.user = self.request.user
instance.save()
return render_to_response('wizard-done.html', {
'form_data': [form.cleaned_data for form in form_list], })
def edit_wizard(request, id):
#get the object
item = get_object_or_404(Item, pk=id)
#make sure the item belongs to the user
if item.user != request.user:
raise HttpResponseForbidden()
else:
#get the initial data to include in the form
initial = {'0': {'id': item.id,
'price': item.price,
#make sure you list every field from your form definition here to include it later in the initial_dict
},
'1': {'image': item.image,
},
'2': {'description': item.description,
},
}
print initial
form = MyWizard.as_view([FirstForm, SecondForm, ThirdForm], initial_dict=initial)
return form(context=RequestContext(request), request=request)
이미지를 전달하는보기 코드를 추가 할 수 있습니까? – schillingt
@schillingt : 위의 views.py를 붙여 넣었습니다. 난보기에서 formwizard를 사용하고 있습니다. 위의 마법사 클래스에 file_storage가 있다는 것을 알았습니다. 아마도 그 원인이 될 수 있습니다. 마법사 클래스는 파일 저장을 요구합니다. 그렇지 않으면 파일이 저장되지 않습니다. –