在Django中更改值会以静态值更改表单字段

问题描述

我是Django的新手,所以可能有一个简单的解决方案。我尝试从Excel加载值并将其添加为表单的认/初始值。但是,formfield更改为静态值(无法再更改)。请参阅下面的3张图像。您能帮我从Excel获取值(第一行和第一列中的值)作为初始值,并且可以更改的形式吗?

初始屏幕: Initial

Excel导入后的结果:After import

Excel导入后的首选结果:Preferred

代码

views.py

from django.shortcuts import render
from django.template import RequestContext
from django.http import HttpResponse
from .models import InputForm
from .models import InputForm1
from .compute import compute
from django.db import models
import os
import xlsxwriter
import io

def index(request):
    os.chdir(os.path.dirname(__file__))
    result = None

if request.method == 'POST' and 'calculate' in request.POST:
    form = InputForm(request.POST)
    form1 = InputForm1()
    if form.is_valid():
        form2 = form.save(commit=False)
        result = compute(form2.A,form2.B,form2.C)

elif request.method == 'POST' and 'calculate1' in request.POST:
        print(1)

        form1 = InputForm1()
        form = InputForm(request.POST)
        if form.is_valid():
            form2 = form.save(commit=False)
            result = compute(form2.A,form2.C)
            print(2)
            # create our spreadsheet.  I will create it in memory with a StringIO
            output = io.BytesIO()
            workbook = xlsxwriter.Workbook(output)
            worksheet = workbook.add_worksheet()
            worksheet.write('A1',result)
            workbook.close()

            # create a response
            response = HttpResponse(content_type='application/vnd.ms-excel')

            # tell the browser what the file is named
            response['Content-disposition'] = 'attachment;filename="some_file_name.xlsx"'

            # put the spreadsheet data into the response
            response.write(output.getvalue())

            # return the response
            return response


elif request.method ==  'POST' and 'calculate2' in request.POST:
    form = InputForm()
    form1 = InputForm1(request.POST,request.FILES)
    if form1.is_valid():
        print("YES")
        form2 = form1.save(commit=False)
        excel_file = request.FILES['file']
        print('success')
        import tempfile
        import xlrd
        fd,path = tempfile.mkstemp() #  mkstemp returns a tuple: an integer (index) called file descriptor used by OS to refer to a file and its path
        try:
            with os.fdopen(fd,'wb') as tmp:
                tmp.write(excel_file.read())
            book = xlrd.open_workbook(path)
            sheet1= book.sheet_by_name("Blad1")
            obj= sheet1.row(0)
            obj1 = obj[0].value

            form3 = InputForm()
            form3 = form3.save(commit=False)
            print('success1')
            form3.A = obj1
            form3.B = obj1
            form3.C = obj1
            form3.save()
            print('success2')
            form = form3
        finally:
            os.remove(path)

else:
    form = InputForm()
    form1 = InputForm1()

return render(request,'vib1.html',{'form': form,'form1': form1,'result': result,})

models.py

from django.db import models
from django.forms import ModelForm,forms
from django.core.validators import MinValueValidator,ValidationError
from math import pi
import functools


class Input(models.Model):
     A = models.DecimalField(decimal_places = 3,max_digits = 5,default = 1)
     B = models.FloatField()
     C = models.FloatField()

class InputForm(ModelForm):
    class Meta:
        model = Input
        fields = '__all__'

class Input1(models.Model):
    file = models.FileField()

class InputForm1(ModelForm):
    class Meta:
        model = Input1
        fields = '__all__'

vib1.html

<form method=post action="">{% csrf_token %}
<table>
  <tr>
    A {{ form.A }} <br>
    B {{ form.B }} <br>
    C {{ form.C }}
  </tr>
</table>
<p><input type=submit name = "calculate" value=Compute>
<p><input type=submit name = "calculate1" value=ExportExcel>


</form></p>

<form method=post action="" enctype="multipart/form-data" >{% csrf_token %}
  {{ form1 }}
<p>
<p>
<p><input type=submit name = "calculate2" value=ImportExcel>
<p>

</form></p>
<p>
{% if result != None %}
{% load static %}
{{ result }}
<br>
{% endif %}
</p>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...