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