20

私は Django を初めて使用し、ModelForm を使用して画像のアップロードを処理する際に問題に遭遇しました。私のモデルは次のとおりです。

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)

モデルフォームは次のとおりです。

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

ビュー機能は次のとおりです。

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>

誰かが私を助けることができますか、または画像のアップロードの例を挙げていただけますか? ありがとうございました!

4

2 に答える 2

55

わかりました、みんなありがとう。私は愚かな間違いを犯したことに気づきました。 Elseを追加する必要enctype="multipart/form-data"があります。ファイルはアップロードされません。<form>

于 2013-10-28T15:49:46.427 に答える
2

newproject.phototo を設定する必要はありませんrequest.FILES['photo'](実際、ここでこれを行うとコードが壊れる可能性があります)。の代わりに をaddprojectform付けて保存するだけです。ここで詳細情報を参照してください: https://docs.djangoproject.com/en/1.5/topics/http/file-uploads/#handling-uploaded-files-with-a-modeladdprojectform.save()newproject = addprojectform.save(commit=False)

于 2013-10-28T14:07:05.277 に答える