2013-10-28 4 views
17

Я довольно новичок в Django, и я столкнулся с проблемой обработки изображений с помощью ModelForm. Моя модель выглядит следующим образом:Django ModelForm Imagefield Загрузить

class Project(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.CharField(max_length=2000) 
    startDate = models.DateField(auto_now_add=True) 
    photo = models.ImageField(upload_to="projectimg/", null=True, blank=True) 

И ModelForm выглядит следующим образом:

class AddProjectForm(ModelForm): 
    class Meta: 
     model = Project 
     widgets = { 
      'description': Textarea(attrs={'cols': 80, 'rows': 50}), 
     } 
     fields = ['name', 'description', 'photo'] 

И View функция:

def addProject(request, template_name): 
if request.method == 'POST': 
    addprojectform = AddProjectForm(request.POST,request.FILES) 
    print addprojectform 
    if addprojectform.is_valid(): 
     newproject = addprojectform.save(commit=False) 
     print newproject 
     print request.FILES 
     newproject.photo = request.FILES['photo'] 
     newproject.save() 
     print newproject.photo 
else: 
    addprojectform = AddProjectForm() 

newProposalNum = projectProposal.objects.filter(solved=False).count() 
return render(request, template_name, {'addprojectform':addprojectform, 
             'newProposalNum':newProposalNum}) 

шаблон:

<form class="bs-example form-horizontal" method="post" action="">{% csrf_token %} 
         <h2>Project Name</h2><br> 
         {{ addprojectform.name }}<br> 
         <h2>Project Description</h2> 
         {{ addprojectform.description }}<br> 
         <h2>Image Upload</h2><br> 
         {{ addprojectform.photo }}<br> 
         <input type="submit" class="btn btn-success" value="Add Project"> 
        </form> 

Может ли любой один поможет мне или вы можете привести пример загрузки изображений? Спасибо!

+1

Можете ли вы указать, в чем ваша проблема ...? – Anto

+0

моя проблема в том, что изображение не загружается в каталог. –

+0

Покажите нам свой шаблон. – Rohan

ответ

40

ОК, спасибо всем. Я обнаружил, что совершил тупую ошибку. Я должен добавить enctype="multipart/form-data" в <form> Иначе он не будет загружать файл.

+0

Спасибо за сообщение, для моего случая, даже весь набор такой же, как у вас с enctype, но в начале он все еще не загружает изображение/файл. Я заново запустил веб-страницу и повторно запускаю несколько раз, и, наконец, она работает. Ваше сообщение помогло мне подтвердить, что мои настройки верны. благодаря – zhihong

2

Вам не нужно устанавливать newproject.photo в request.FILES['photo'] (на самом деле это право здесь, вероятно, нарушает ваш код). Просто сохраните addprojectform с addprojectform.save() вместо newproject = addprojectform.save(commit=False). Подробнее см. Здесь: https://docs.djangoproject.com/en/1.5/topics/http/file-uploads/#handling-uploaded-files-with-a-model

Смежные вопросы