2012-05-03 95 views
0

我有以下型号ORM更新不支持文件上传

class Category(models.Model): 
    name = models.CharField(max_length=30) 
    is_active=models.BooleanField() 
    photo=models.ImageField(upload_to='category') 
    def __unicode__(self): 
     name = str(self.name) 
     return name 
    class Meta: 
     permissions = (
      ('category','Category'), 
      ('view_category', 'View category'), 
     ) 

我的窗体类是如下

class categoryForm(forms.Form): 
    name = forms.CharField(widget=forms.TextInput(attrs={'class':'box'}),max_length=32,label='Category',required=True) 
    is_active = forms.BooleanField(required=False) 
    id = forms.CharField(widget=forms.HiddenInput,required=False) 
    photo = forms.FileField(
      required=False, 
      label='Select an Image', 
      help_text='max. 4 megabytes' 
      ) 

在view.py我有以下

formdata = categoryForm(request.POST,request.FILES) 
    if formdata.is_valid(): 
      cd = formdata.cleaned_data 
      p1=Category() 
      p1.id=cd['id'] 
      p1.name=cd['name'] 
      p1.is_active=cd['is_active'] 
      p1.photo=cd['photo'] 
      p1.save() 

它工作正常,但当我将其更改为以下内容时,图像未上传

Category.objects.filter(id='%s'%(cd['id'])).update(name='%s'%(cd['name']), 
            is_active='%s'%(cd['is_active']), 
            photo=cd['photo'] 
            ) 

我认为第二种方法是更快的方式,但它为什么不为ImageField的

回答

0

工作上面粘贴代码中的ID是一个字符串,尝试将其转换为一个int。我想这将使过滤器查询工作,并因此使更新工作以及。

+0

筛选查询工作fine.Other领域(除了图像)正在更新 – sumit

0

您不应该将字符串传递给is_active。只需传递布尔值就可以工作。另外,您不应该编写像'%s' % string这样的代码;你可以使用string

+0

真实的,但仍是问题是有...使用第二种方法没有图片上传..请帮助我 – sumit

+0

从您的代码示例1,它看起来像你正在创建一个新的类别对象。你为什么在你的第二个代码示例中使用'filter'?你应该使用'Category.objects.create(id = ...,is_active = ...)'。有关示例,请参阅django文档:https://docs.djangoproject.com/en/1.4/ref/models/querysets/#django.db.models.query.QuerySet.create – spinlok

+0

Filter + update将使执行速度更快,在更新查询中创建对象将首先找出该id是否存在,如果是,则会更新,否则将插入。 – sumit