2012-02-29 29 views
0

获取请求我有这样一个模型:在admin.py

class Item(models.Model): 
    code = models.CharField(max_length=200, unique=True) 
    barcode = models.CharField(max_length=300) 
    desc = models.CharField('Description',max_length=500) 
    display_desc = models.CharField('Description',max_length=500, 
            blank=True, null=True) 
    price = models.FloatField() 
    discountable = models.BooleanField(blank=True, default=False) 
    image_path = models.CharField(max_length=300,unique=True, blank=True, null=True)  

    def __unicode__(self): 
     return self.code + ' : ' + self.desc 

但不幸的是,我不想给该项目的图像存储在数据库中,而不是我想要存储的图像路径服务器在image_path列中。

所以,我创建一个自定义admin.py此对象,这样我可以编辑/插入通Django管理模块的对象。其结果,下面是定制admin.py

class ItemAdminForm(forms.ModelForm): 
    file_upload = forms.FileField(required=False) 

    class Meta: 
     model = Item 

    def __init__(self, *args, **kwargs): 
     super(ItemAdminForm, self).__init__(*args,**kwargs) 

     #if kwargs.has_key('instance'): 
     # instance = kwargs['instance'] 
     # self.initial['file_upload'] = instance.file_upload 

    def handle_uploaded_file(f): 
     destination = open('D:/Project/pensel/penselshop/static/picture', 'wb+') 
     for chunk in f.chunks(): 
      destination.write(chunk) 
     destination.close() 
     return f.name 

    def save(self,commit=True): 
     name = None 
     extension = None 
     #error here! How could I get the request? 
     miniform = ItemAdminForm(request.POST, request.FILES) 
     if miniform.is_valid(): 
      name = handle_uploaded_file(request.FILES['file_upload'])  
      extension = name.split('.')[1] 
     model = super(ItemAdminForm, self).save(commit=False) 
     model.image_path = '/static/picture/' + model.code + extension   

     if commit: 
      model.save() 

     return model 

然而,在处理save()功能期间,我注意到,有在得到请求的错误。我如何获得请求以便我可以检索文件?我注意到请求被自动添加到views.py中,但不是admin.py

回答

1

Django的ImageFieldFileField字段实际上并没有将图像存储在数据库中。所有存储在数据库中的路径都是您可以控制自己的路径。实际的图像文件存储在文件系统中。所以我不知道为什么你要这么麻烦......?

但要回答您如何在管理员中获得request的问题,您可以覆盖ModelAdmin.save_model()

+0

那么这是否意味着的FileField和ImageField的自动上传的文件呢?如果是这样,如何设置位置? – 2012-02-29 02:22:20

+0

@HaikalNashuha参见上的[upload_to](https://docs.djangoproject.com/en/1.3/ref/models/fields/#django.db.models.FileField.upload_to)参数的文档。 – 2012-02-29 03:16:20