问题描述
我是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 (将#修改为@)