正在获取请求管理员.py

2024-10-02 22:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个模型:

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列中存储映像路径。你知道吗

所以,我创建了一个自定义管理员.py以便我可以通过Django管理模块编辑/插入对象。因此,下面是定制的管理员.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()函数的过程中,我注意到获取请求时出错。如何获取请求以便检索文件?我注意到请求被自动添加到视图.py,但不是管理员.py你知道吗


Tags: instancenamepyselftruemodelmodelsdef
1条回答
网友
1楼 · 发布于 2024-10-02 22:36:06

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

但是要回答如何在admin中获取request的问题,可以重写ModelAdmin.save_model()。你知道吗

相关问题 更多 >