2012-02-29 28 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