2012-04-14 37 views
2

jqueryフォームプラグインhttp://jquery.malsup.com/form/#getting-startedを使用して、ajaxで画像をアップロードしています。私がアップロードしようとすると、それは、モデルが何の属性がここ を_committedなかった示して私のHTMLです:モデルには属性がありません。コミット

<form id="uploadform" method="post" enctype="multipart/form-data" action="/cover/">{% csrf_token %} 
     {{ form.background }} 
</form> 

Javascriptを:

https://gist.github.com/2381406

Models.py:

class BackgroundModel(models.Model): 
    user = models.OneToOneField(User) 
    background = models.ImageField(upload_to='backgrounds') 

class BackgroundModelForm(ModelForm): 
    class Meta: 
     model = BackgroundModel 
     exclude = ('user',) 

ビュー。 py:

@login_required 
def backgroundview(request): 
    if request.is_ajax(): 
     form = BackgroundModelForm(request.POST, request.FILES) 
     if form.is_valid(): 
      try: 
       g = BackgroundModel.objects.get(user=request.user) 
      except BackgroundModel.DoesNotExist: 
       data = form.save(commit=False) 
       data.user = request.user 
       data.save() 
      else: 
       g.background = form 
       g.save() 
      HttpResponse(" ") 
    else: 
     form = BackgroundModelForm() 
    return render_to_response("cover.html", {'form': form}, context_instance=RequestContext(request)) 

Urls.py:他の支店で

url(r'^cover/$', 'cover.views.backgroundview'), 

答えて

2

代わりのg.background = form、受け入れられたタイプの値のみがモデルインスタンスの対応するフィールドに割り当てることができ

try: 
    g = BackgroundModel.objects.get(user=request.user) 
except BackgroundModel.DoesNotExist: 
    data = form.save(commit=False) 
    data.user = request.user 
    data.save() 
else: 
    g.background = form.save(commit=False).background 
    g.save() 
    # or 
    BackgroundModelForm(request.POST, request.FILES, instance=g).save() 

を試してみてください。
ここmodels.ImageFieldが

  • ファイルパス文字列
  • django.db.models.fields.files.ImageFieldFile
  • django.core.files.images.ImageFile
+0

を私は使用することができます受け入れますModelFormのこのコード? – rnk

+0

@mk yep、または 'BackgroundModelForm(request.POST、request.FILES、instance = g).save()'をelseブランチで実行できます。 – okm

関連する問題