【问题标题】:Model has no attribute _committed模型没有属性 _committed
【发布时间】:2012-04-26 09:02:23
【问题描述】:

我正在使用 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

模型.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))

网址.py:

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

【问题讨论】:

    标签: javascript jquery python django


    【解决方案1】:

    不要在 else 分支中使用 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

    【讨论】:

    • @mk 是的,或者你可以在 else 分支中做 BackgroundModelForm(request.POST, request.FILES, instance=g).save()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2018-08-19
    相关资源
    最近更新 更多