广告区

广告区


本站消息

站长简介/公众号

关注本站官方公众号:程序员总部,领取三大福利!
福利一:python和前端辅导
福利二:进程序员交流微信群,专属于程序员的圈子
福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

获取modelfield django的本地文件路径

发布于2022-05-18 03:21     阅读(1004)     评论(0)     点赞(28)     收藏(0)



我对 django 模型有疑问。我有一个模型'model1'

class model1(models.Model):
dataset = models.FileField(upload_to='estimate/')

def column(self):
    arr = os.listdir('uploads/estimate')
    try:
        dframe = pd.read_csv(f'uploads/estimate/{arr[0]}')
        columns = dframe.columns
        columns_tuple = [tuple([x,x]) for x in columns]
        return columns_tuple
    except:
        return [('---','---')]

这个model1主要用于上传csv文件,我想获取另一个模型'model2'的下拉列表选项的列名。

class model2(models.Model):
    column = estimate()
    columns = column.column()
    open_column = models.CharField(max_length=50, choices = columns)
    high_column = models.CharField(max_length=50, choices = columns)
    low_column = models.CharField(max_length=50, choices = columns)
    close_column = models.CharField(max_length=50, choices = columns)
    volume_column = models.CharField(max_length=50, choices = columns)

最初目录 uploads/estimate 是空的,因此 model1.column() 将返回columns = [('---','---')],但是当我将 csv 文件上传到 model1 时,model2 不会更新下拉列表选项。

我不确定可以读取 csv 文件的任何其他方式,所以我使用pd.read_csv,这是因为我不知道如何使用该对象dataset,我尝试使用self.dataset.nameorself.dataset.path获取本地文件路径,但系统说它没有这些属性。所以我最终使用 os.listdir 来定位文件

感谢是否有人可以帮助我解决这个问题!


解决方案


您可以添加另一个FileSystemStorage仅应用于您的数据集字段的内容。

试试这样:

class CustomStorages(FileSystemStorage):
    @cached_property
    def base_location(self): # override this where you dataset located
        return self._value_or_setting(self._location, settings.MEDIA_ROOT)

    @cached_property
    def location(self): # or override this where you dataset is located
        return os.path.abspath(self.base_location)

并将其附加到您的 FileFILED

class model1(models.Model):
    dataset = models.FileField(upload_to='estimate/', storage=CustomStorages)

DjangoFileSystemStorage是默认存储,默认情况下它的位置来自settings.py文件。

FileStorage因此,当您的数据位于不同位置时,您必须定义自定义。

所以在你配置了上面的建议之后。

并像这样填充您的文件字段。

import os
os.rename('dataset.csv', 'newdataset.csv')
dataset = model1()
dataset.myfile.name = 'newdataset.csv'
dataset.save()






所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1523238/5eb1ffc46ac1061da620/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)