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',)

Views.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'),
4

1 に答える 1

2

g.background = formelseブランチの代わりに、試してください

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
于 2012-04-14T02:19:33.997 に答える