2016-11-29 8 views
0

フォームからdjangoに写真をアップロードすると、画像フィールドは空です。django ImageField after form post

class Person(models.Model): 
    user = models.ForeignKey(User, default=1) 
    name = models.CharField(max_length=250,null=True) 
    last_name = models.CharField(max_length=500)   
    treatment_plan=models.CharField(max_length=256,null=True,blank=True) 
    treatment_done=models.CharField(max_length=256,null=True,blank=True)   

    picture = models.ImageField(upload_to='image', storage=DEFAULT_FILE_STORAGE,blank=True) 

    def __str__(self): 
     return self.name 

のModelForm:

class PersonForm(forms.ModelForm): 

    class Meta: 
     model = Person 
     fields = ['name', 'last_name', 'age', 'martial_status', 'mobile', 'sex', 
        'amount_paid','amount_left','note', 'address','date','picture','treatment_done','treatment_plan','chief_complain'] 
     widgets = { 
      'name': forms.TextInput(attrs={'required': True, 'class': 'form-control', 
              'placeholder': 'name'}), 
      'last_name': forms.TextInput(attrs={'required': True, 'class': 'form-control', 
      'picture': forms.FileInput(attrs={'required': False,'class': 'form-control','enctype': 'multipart/form-data'}), 

view.py:

私はフォームが 'multipart/form-data'

モデルを有するコンソールで確認logging.info(form.cleaned_data['picture'])

を使用してこれを確認しました

def add_person(request): 
    if not request.user.is_authenticated(): 
     return render(request, 'core/login.html') 
    else: 
     form = PersonForm(request.POST or None,request.FILES or None,instance=Person()) 
     #form = PersonForm(request.POST or None,request.FILES) 
     if form.is_valid(): 

      persons = form.save() 

      persons.user = request.user 
      #to capitalized the first letter so we have consistency when querying , this is a workaround since __iexact is not working 
      persons.name=persons.name.title() 
      persons.last_name=persons.last_name.title() 
      logging.info(form.cleaned_data['last_name']) 

      persons.save() 

      return redirect('home') 
     context = { 
      "form": form, 
     } 
     return render(request, 'core/add_person.html', context) 

HTMLテンプレート:

<div class="col-sm-4 form-group"> 
    <label for="address">{% trans "Address" %}</label> 
    {{ form.address|add_class:"form-control" }} 
    </div> 
     <div class="col-sm-4 form-group"> 
    <label for="pic">{% trans "Picture" %}</label> 
    {{form.picture}} 
    </div> 
+1

にあなたのHTMLテンプレートフォームは、この属性 'にenctype = "multipart/form-データ"' – pitaside

+0

チェック 'インスタンス=人を()'ていません。 –

答えて

1

私は間違っているかもしれないが、まだ、私の知る限りでは、パラメータ「マルチパート/フォームデータが」形式ではなく、入力にする必要があり、そしてあなたがそれをインストールあなたは、フォームに新しい人のインスタンスを渡す:FieldFile

'picture': forms.FileInput(attrs={'required': False,'class': 'form-control','enctype': 'multipart/form-data'}), 
+0

私の問題を解決していただきありがとうございます –