模型没有属性_committed [英] Model has no attribute _committed

查看:151
本文介绍了模型没有属性_committed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用jquery表单插件 http://jquery.malsup.com/form/ #get-started 通过ajax上传图像。当我尝试上传它显示模型没有属性_committed
这是我的Html:

 < form id =uploadformmethod =postenctype =multipart / form-dataaction =/ cover /> {%csrf_token%} 
{{form.background}}
< /形式>

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):
如果request.is_ajax():
form = BackgroundModelForm(request.POST,request.FILES)
如果form.is_valid():
try:
g = BackgroundModel.objects.get(user = request.user)
除了BackgroundModel.DoesNotExist:
data = form。 save(commit = False)
data.user = request .user
data.save()
else:
g.background = form
g.save()
HttpResponse()
其他:
form = BackgroundModelForm()
return render_to_response(cover.html,{'form':form},context_instance = RequestContext(request))
pre>

Urls.py:

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


解决方案

p>而不是在$分支中的 g.background = form ,尝试

  try:
g = BackgroundModel.objects.get(user = request.user)
除了BackgroundModel.DoesNotExist:
data = form.save(commit = False)
数据。 user = request.user
data.save()
else:
g.background = form.save(commit = False).background
g.save()
#或
BackgroundModelForm(request.POST,request.FILES,instance = g).s ave()

只有一个接受类型的值可以分配给模型实例的相应字段。
models.ImageField这里接受




  • 文件路径字符串

  • django.db .models.fields.files.ImageFieldFile

  • django.core.files.images.ImageFile


I'm using jquery form plugin http://jquery.malsup.com/form/#getting-started to upload images through ajax. When I try to upload it shows the model has no attribute _committed Here is my 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'),

解决方案

Instead of g.background = form in the else branch, try

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()

Only a value of accepted types could be assigned to corresponding field of a model instance.
models.ImageField here accepts

  • file path string
  • django.db.models.fields.files.ImageFieldFile
  • django.core.files.images.ImageFile

这篇关于模型没有属性_committed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆