FileField()不显示在temp中

2024-10-05 10:11:08 发布

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

我正在将文件上传功能添加到我的前任创建的网站中。当前版本如下所示:

enter image description here

问题在于,上传自定义数据上传之间应该有一个按钮用于浏览和拾取文件,但没有

更奇怪的是,在选择资产1资产2后,然后单击计算,浏览文件的按钮突然出现,浏览…上传按钮工作正常:

enter image description here

此页面的HTML代码为correlation.HTML

{% extends "instvol/layout.html" %}
{% block body %}



<div class="container about-container">
    <div class="row">
        <h2>Correlation Analysis</h2>
    </div>

    <div class="row">

        <form method="GET">

            <div class="corr-form">

                <fieldset id="additional-field-model">
                    <div class="form-group">
                        <div class="col-md-6 col-sm-12">
                            <label class="col-md-12 control-label" for="field-a">Asset 1</label>
                            <div class="input-group">
                                <select id="field-a" name="field-a"   class="form-control input-md"  required="">
                                    <option disabled="" selected="">Select</option>
                                    {% for ticker in ticker_list %}
                                        <option value="{{ticker}}" {% if symbolName == ticker %}{% endif %}>{{ticker}}</option>
                                    {% endfor %}
                                </select>
                            </div>
                        </div>
                        <div class="col-md-2 col-xs-5">
                            <label class="col-md-12 control-label" for="field-b">Asset 2</label>
                            <div class="input-group">
                                <select id="field-b" name="field-b"   class="form-control input-md"  required="">
                                    <option disabled="" selected="">Select</option>
                                    {% for ticker in ticker_list %}
                                        <option value="{{ticker}}" {% if symbolName == ticker %}{% endif %}>{{ticker}}</option>
                                    {% endfor %}
                                </select>
                            </div>
                        </div>
                        <div class="col-md-4 col-xs-7 text-right">
                            <label class="col-xs-12 control-label" for="field-c"><br/></label>
                            <a href="javascript:void(0);" class="btn btn-warning remove-this-field"> <span class="hidden-xs"> Delete </span> </a> 
                            <a href="javascript:void(0);" class="btn btn-success create-new-field"> <span class="hidden-xs"> Add </span> </a> 
                        </div>
                    </div>
                </fieldset>
            </div>


            <script>
                $('#additional-field-model').duplicateElement({"class_remove": ".remove-this-field",
                                                               "class_create": ".create-new-field", });
            </script>

            <hr>

            <div class="form-group">
                    <span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
                    <label for="input-daterange">Date Range</label>
                    <input type="text" class="form-control" name="daterange"/>
            </div>
            <div>
                    <button type="submit" class="btn btn-primary">Calculate</button>
            </div>
        </form>
    </div>

    <hr>

    <div class="row">
        <div class="panel-body">
            <!-- Standar Form -->
            <h4>Upload Custom Data</h4>
            <form method="POST" enctype="multipart/form-data"">
                {% csrf_token %}
                <div>
                    <div class="form-group">
                {{ form }}
                    </div>
                    <div>
                        <button type="submit" class="btn btn-primary">Upload</button>
                    </div>
                </div>
            </form>
        </div>
    </div>

    <hr>

    <div class="row">

        <h4> Asset Price</h4>
        <div class="col-lg" id="plotly-figure-his">
            {{ plot_div_spot|safe }}
        </div>
        <hr>
        <h4>Historical Correlation</h4>
        <div class="col-lg" id="plotly-figure-his">
            {{ plot_div_his|safe }}
        </div>
        <hr>
        <h4>Instantaneous Correlation</h4>
        <div class="col-lg" id="plotly-figure">
            {{ plot_div_inst|safe }}
        </div>

    </div>
</div>

<script>
</script>

{% endblock %}

视图.py中的相关部分如下所示:

def correlation(request):
    if request.method == 'POST': #custom upload
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            cusdata = pd.read_csv(request.FILES['file'], header=None)

        spot1 = ['Asset 1', ]
        spot2 = ['Asset 2', ]
        symbolPair = list(zip(spot1, spot2))

        start = 1 
        end = len(cusdata)

        rhodata = []
        for pair in symbolPair:
            f1 = pd.DataFrame({'price':cusdata.iloc[:,0].astype('double')})
            f2 = pd.DataFrame({'price':cusdata.iloc[:,1].astype('double')})

            T = (end-start) / 252 

            corr = getcorr(f1, f2, T)
            corr.append(' / '.join(list(pair)))
            rhodata.append(corr)

        spotdata = []
        spots = list(set(spot1+spot2))
        for i in range(len(spots)):
            spotval = pd.DataFrame({'price':cusdata.iloc[:,i].astype('double')})
            spotdata.append([spotval, spots[i]])

        instcorrdiv = instvol.myplotly.getcorrdiv(rhodata)
        hiscorrdiv = instvol.myplotly.getcorrdiv(rhodata, isHis=1)
        spotdiv = instvol.myplotly.getspotdiv(spotdata)

    else:
        spot1 = request.GET.getlist('field-a')
        spot2 = request.GET.getlist('field-b')
        symbolPair = list(zip(spot1, spot2))
        daterange = request.GET.get('daterange', 'None')

        if len(symbolPair) == 0:
            symbolPair = [['SPX','NDWLIT'], ['SPX', 'FTMIGMI'], ['SPX','GBIEMDCW']]
            spot1 = list(zip(*symbolPair))[0]
            spot2 = list(zip(*symbolPair))[1]
            if daterange == 'None':
                context = pickle.load(open( "defaultcorr_context.p", "rb" ))
                template = loader.get_template('instvol/correlation.html')
                return HttpResponse(template.render(context, request))

        daterange = daterange.replace(' ','').split('-')
        start = datetime.datetime.strptime(daterange[0], '%Y%m%d')
        end = datetime.datetime.strptime(daterange[1], '%Y%m%d')

        rhodata = []
        for pair in symbolPair:
            f1 = Stock.objects.get(ticker=pair[0]).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
            f1 = pd.DataFrame(list(f1.values())).set_index('ts').astype('float').dropna()
            f1.index = pd.to_datetime(f1.index.date)
            f2 = Stock.objects.get(ticker=pair[1]).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
            f2 = pd.DataFrame(list(f2.values())).set_index('ts').astype('float').dropna()
            f2.index = pd.to_datetime(f2.index.date)
            commonidx = f1.index.intersection(f2.index)
            f1 = f1.loc[commonidx]
            f2 = f2.loc[commonidx]

            T = (end-start).days / 252 

            corr = getcorr(f1, f2, T)
            corr.append(' / '.join(list(pair)))
            rhodata.append(corr)

        spotdata = []
        for spot in list(set(spot1+spot2)):
            spotval = Stock.objects.get(ticker=spot).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
            spotval = pd.DataFrame(list(spotval.values()))
            spotval = spotval.set_index('ts').astype('float').dropna()
            spotval.index = pd.to_datetime(spotval.index.date)
            spotdata.append([spotval, spot])

        instcorrdiv = instvol.myplotly.getcorrdiv(rhodata)
        hiscorrdiv = instvol.myplotly.getcorrdiv(rhodata, isHis=1)
        spotdiv = instvol.myplotly.getspotdiv(spotdata)

        form = UploadFileForm()

    template = loader.get_template('instvol/correlation.html')

    context = {'plot_div_inst': instcorrdiv, 'plot_div_his': hiscorrdiv, 'plot_div_spot': spotdiv,  'ticker_list': tickers, 'form': form}

    return HttpResponse(template.render(context, request))

forms.py

来自django导入表单

class UploadFileForm(forms.Form):
    # title = forms.CharField(max_length=50)
    file = forms.FileField()

Tags: divformfieldforindexrequestcollabel
1条回答
网友
1楼 · 发布于 2024-10-05 10:11:08

问题是,当在没有给出参数的情况下首先加载页面时,correlation()中的if...else语句进入else部分,并且request.GET.getlist('field-a')request.GET.getlist('field-b')失败,导致form未被描述

因此,我对views.py进行如下修改:

def correlation(request):
    if request.method == 'POST': #custom upload
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            cusdata = pd.read_csv(request.FILES['file'], header=None)

        spot1 = ['Asset 1', ]
        spot2 = ['Asset 2', ]
        symbolPair = list(zip(spot1, spot2))

        start = 1
        end = len(cusdata)

        rhodata = []
        for pair in symbolPair:
            f1 = pd.DataFrame({'price':cusdata.iloc[:,0].astype('double')})
            f2 = pd.DataFrame({'price':cusdata.iloc[:,1].astype('double')})

            T = (end-start) / 252

            corr = getcorr(f1, f2, T)
            corr.append(' / '.join(list(pair)))
            rhodata.append(corr)

        spotdata = []
        spots = list(set(spot1+spot2))
        for i in range(len(spots)):
            spotval = pd.DataFrame({'price':cusdata.iloc[:,i].astype('double')})
            spotdata.append([spotval, spots[i]])

        instcorrdiv = instvol.myplotly.getcorrdiv(rhodata)
        hiscorrdiv = instvol.myplotly.getcorrdiv(rhodata, isHis=1)
        spotdiv = instvol.myplotly.getspotdiv(spotdata)

   elif request.method == 'GET' and request.GET.getlist('field-a'): # built-in data
        spot1 = request.GET.getlist('field-a')
        spot2 = request.GET.getlist('field-b')
        symbolPair = list(zip(spot1, spot2))
        daterange = request.GET.get('daterange', 'None')

        if len(symbolPair) == 0:
            symbolPair = [['SPX','NDWLIT'], ['SPX', 'FTMIGMI'], ['SPX','GBIEMDCW']]
            spot1 = list(zip(*symbolPair))[0]
            spot2 = list(zip(*symbolPair))[1]
            if daterange == 'None':
                context = pickle.load(open( "defaultcorr_context.p", "rb" ))
                template = loader.get_template('instvol/correlation.html')
                return HttpResponse(template.render(context, request))

        daterange = daterange.replace(' ','').split('-')
        start = datetime.datetime.strptime(daterange[0], '%Y%m%d')
        end = datetime.datetime.strptime(daterange[1], '%Y%m%d')

        rhodata = []
        for pair in symbolPair:
            f1 = Stock.objects.get(ticker=pair[0]).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
            f1 = pd.DataFrame(list(f1.values())).set_index('ts').astype('float').dropna()
            f1.index = pd.to_datetime(f1.index.date)
            f2 = Stock.objects.get(ticker=pair[1]).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
            f2 = pd.DataFrame(list(f2.values())).set_index('ts').astype('float').dropna()
            f2.index = pd.to_datetime(f2.index.date)
            commonidx = f1.index.intersection(f2.index)
            f1 = f1.loc[commonidx]
            f2 = f2.loc[commonidx]

            T = (end-start).days / 252

            corr = getcorr(f1, f2, T)
            corr.append(' / '.join(list(pair)))
            rhodata.append(corr)

        spotdata = []
        for spot in list(set(spot1+spot2)):
            spotval = Stock.objects.get(ticker=spot).stockprice_set.filter(ts__gte=start.date(), ts__lte=end.date())
            spotval = pd.DataFrame(list(spotval.values()))
            spotval = spotval.set_index('ts').astype('float').dropna()
            spotval.index = pd.to_datetime(spotval.index.date)
            spotdata.append([spotval, spot])

        instcorrdiv = instvol.myplotly.getcorrdiv(rhodata)
        hiscorrdiv = instvol.myplotly.getcorrdiv(rhodata, isHis=1)
        spotdiv = instvol.myplotly.getspotdiv(spotdata)

        form = UploadFileForm()

    else:
        instcorrdiv = None
        hiscorrdiv = None
        spotdiv = None

        form = UploadFileForm()

    template = loader.get_template('instvol/correlation.html')

    context = {'plot_div_inst': instcorrdiv, 'plot_div_his': hiscorrdiv, 'plot_div_spot': spotdiv,  'ticker_list': tickers, 'form': form}

    return HttpResponse(template.render(context, request))

相关问题 更多 >

    热门问题