[英]Passing parameter from function to another function in Django
我在views.py
有這兩個函數: create_excel
和section_landpins
。
section_landpins
:
def section_landpins(request):
if request.method == "GET":
get_id = request.user.id
pnt = ButuanMaps.objects.get(clandpin='162-03-0001-017-33').geom
kmdistance = request.GET.get('kmtocity', default=100)
mysection = request.GET.get('mysection', default='All')
getarea = request.GET.get('getarea', default=5500000)
getvalue = request.GET.get('mysoiltype', default=0)
getvalue1 = request.GET.get('myerosion', default=0)
args = []
kwargs = {
'landproperty__sownerid__id': get_id,
'geom__distance_lte': (pnt, D(km=kmdistance)),
'narea__lte': getarea
}
if mysection != 'All':
kwargs['ssectionid__id'] = mysection
if getvalue != '0':
args.append(Q(geom__intersects=SoilType.objects.get(id=getvalue).geom))
if getvalue1 != '0':
args.append(Q(geom__intersects=ErosionMap.objects.get(id=getvalue1).geom))
#this queryset below, I want this to be pass to `create_excel` function
m = ButuanMaps.objects.filter(*args, **kwargs).values_list('clandpin')
return HttpResponse(json.dumps(list(m)), content_type='application/json')
我想將變量m
傳遞給另一個函數以過濾我的excel文件。
這是create_excel
:
def create_excel(request):
book = xlwt.Workbook(encoding='utf8')
sheet = book.add_sheet('untitled')
default_style = xlwt.Style.default_style
datetime_style = xlwt.easyxf(num_format_str='dd/mm/yyyy hh:mm')
date_style = xlwt.easyxf(num_format_str='dd/mm/yyyy')
headers = [f.name for f in SOMEMODELHERE._meta.fields]
#values should have the query of m from `section_landpins`
values = LandProperty.objects.all().values_list()
values_list = [headers] + list(values)
for row, rowdata in enumerate(values_list):
for col, val in enumerate(rowdata):
if isinstance(val, datetime):
style = datetime_style
elif isinstance(val, date):
style = date_style
else:
style = default_style
sheet.write(row, col, val, style=style)
response = HttpResponse(mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=example.xls'
book.save(response)
return response
我如何從section_landpins
獲取或傳遞queryset m
到create_excel
函數,以便我過濾Excel文件結果?
聽起來您想訪問不同請求之間的變量。 有幾種方法可以做到這一點:
我想我會先從1.開始,如果您遇到任何性能問題,請切換到2。
以下是如何執行1的示例:
def section_landpins(request):
queryset = get_landpins_from_request(request)
return HttpResponse(json.dumps(list(queryset)), content_type='application/json')
def create_excel(request):
queryset = get_landpins_from_request(request)
# Do rest of processing here
return response
def get_landpins_from_request(request):
"Returns queryset of landpins based on GET request."
# Add processing of request.GET into a queryset here
return queryset
您可以將代碼更改為
def section_landpins(request):
if request.method == "GET":
get_id = request.user.id
pnt = ButuanMaps.objects.get(clandpin='162-03-0001-017-33').geom
kmdistance = request.GET.get('kmtocity', default=100)
mysection = request.GET.get('mysection', default='All')
getarea = request.GET.get('getarea', default=5500000)
getvalue = request.GET.get('mysoiltype', default=0)
getvalue1 = request.GET.get('myerosion', default=0)
args = []
kwargs = {
'landproperty__sownerid__id': get_id,
'geom__distance_lte': (pnt, D(km=kmdistance)),
'narea__lte': getarea
}
if mysection != 'All':
kwargs['ssectionid__id'] = mysection
if getvalue != '0':
args.append(Q(geom__intersects=SoilType.objects.get(id=getvalue).geom))
if getvalue1 != '0':
args.append(Q(geom__intersects=ErosionMap.objects.get(id=getvalue1).geom))
#this queryset below, I want this to be pass to `create_excel` function
request.m = ButuanMaps.objects.filter(*args, **kwargs).values_list('clandpin')
return create_excel(request)
def create_excel(request):
book = xlwt.Workbook(encoding='utf8')
sheet = book.add_sheet('untitled')
default_style = xlwt.Style.default_style
datetime_style = xlwt.easyxf(num_format_str='dd/mm/yyyy hh:mm')
date_style = xlwt.easyxf(num_format_str='dd/mm/yyyy')
headers = [f.name for f in SOMEMODELHERE._meta.fields]
#the required queryset can be accessed this way
values = request.m
values = LandProperty.objects.all().values_list()
values_list = [headers] + list(values)
for row, rowdata in enumerate(values_list):
for col, val in enumerate(rowdata):
if isinstance(val, datetime):
style = datetime_style
elif isinstance(val, date):
style = date_style
else:
style = default_style
sheet.write(row, col, val, style=style)
response = HttpResponse(mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=example.xls'
book.save(response)
return response
我認為這會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.