[英]How do I run function on database class rather than class in views.py in django
I have this in my views.py, it all works if I use the class in the views.py but if i switch the function to use the same class in the models.py (which is what I want to use) I get: '<' not supported between instances of 'int' and 'DeferredAttribute'我在views.py中有这个,如果我在views.py中使用class,这一切都有效,但是如果我将function切换为使用相同的class,我会得到:py 'int' 和 'DeferredAttribute' 的实例之间不支持 '<'
If I declare it an int() then I get: a typerror.如果我将其声明为 int(),那么我会得到:一个 typerror。 int() argument must be a string, a bytes-like object or a number, not 'DeferredAttribute'
int() 参数必须是字符串、类似字节的 object 或数字,而不是“DeferredAttribute”
This is my code.这是我的代码。 Can someone point me in the right direction please.
有人可以指出我正确的方向吗?
from django.views.generic.base import TemplateView
from django.shortcuts import render
from django.http import HttpResponse
import math, datetime
from settings.models import Extruder
class Extruders:
def __init__(self, name, min_width = 0, max_width = 0, max_speed = 0, gussets = False, printer = False,
location = "GY", lft = False, cfs = False, dws = False, jfs = False, sws = False, treatment = False):
self.name = name
self.min_width = min_width
self.max_width = max_width
self.max_speed = max_speed
self.gussets = gussets
self.printer = printer
self.location = location
self.lft = lft
self.cfs = cfs
self.dws = dws
self.jfs = jfs
self.sws = sws
self.treatment = treatment
def __str__(self):
return self.name
ext1 = Extruders(name = "Extruder 1", max_width = 300, min_width = 50, max_speed= 30,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True, treatment = True)
ext2 = Extruders(name = "Extruder 2", max_width = 300, min_width = 40, max_speed= 30,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True)
ext3 = Extruders(name = "Extruder 3", max_width = 600, min_width = 200, max_speed= 30,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True)
ext4 = Extruders(name = "Extruder 4", max_width = 800, min_width = 400, max_speed= 70,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True)
ext5 = Extruders(name = "Extruder 5", max_width = 300, min_width = 50, max_speed= 30,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True)
ext6 = Extruders(name = "Extruder 6", max_width = 300, min_width = 100, max_speed= 30,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True)
ext7 = Extruders(name = "Extruder 7", max_width = 400, min_width = 200, max_speed= 70,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True)
ext8 = Extruders(name = "Extruder 8", max_width = 1020, min_width = 500, max_speed= 130,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True, treatment = True, sws = True, jfs = True)
ext9 = Extruders(name = "Extruder 9", max_width = 1550, min_width = 800, max_speed= 160,
gussets = True, printer = True, location = "GY", lft = True, cfs = True, dws = True, sws = True, treatment = True, jfs = True)
ext = [
ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9
]
extruders = Extruder.objects.all()
class FilmSpeedView(TemplateView):
template_name = 'calculations/film-speed.html'
class BagWeightView(TemplateView):
template_name = 'calculations/bag-weight.html'
class CalculatorsView(TemplateView):
template_name = 'calculations/calculators.html'
def filmSpeed(request):
return render(request, 'calculations/film-speed.html')
def result(request):
film_type=''
film_width=''
measure=''
speeds = [0]
quantity = 0
max_speed = 0
ave_speed = 0
ave_time = 0
max_time = 0
a=[]
b=[]
c=[]
d=[]
e=[]
if request.method=="GET":
film_type = str(request.GET["film_type"])
film_width = int(request.GET["film_width"])
edge_trim = int(request.GET["edge_trim"])
quantity =int(request.GET["quantity"])
measure = str(request.GET["measure"])
if measure == "metric":
film_width = int(film_width)
else:
film_width = film_width * 25.4
if edge_trim == '':
edge_trim = 0
else:
edge_trim = int(edge_trim)
if str(film_type) == 'Layflat Tubing':
film_type = "LFT"
for extruder in extruders:
if film_width < int(Extruder.min_width):
b.append(Extruder.name + ' : Film too narrow')
elif film_width > int(Extruder.max_width):
b.append(Extruder.name + ' : Film too wide')
else:
percentage = film_width / Extruder.max_width
speed = Extruder.max_speed * percentage
a.append(Extruder.name + ' : ' + str(round(speed, 2)) + 'kgs/h')
speeds.append(speed)
max_speed = max(speeds)
ave_speed = sum(speeds) / len(speeds)
ave_time = float(quantity) / ave_speed * 60.0
max_time = float(quantity) / max_speed * 60.0
elif film_type == "Single Wound Sheeting":
film_type = "SWS"
for extruder in extruders:
if film_width < Extruder.min_width:
b.append(Extruder.name + ' : too narrow for extruder')
elif film_width > Extruder.min_width:
b.append(Extruder.name + ' : Too wide for extruder')
else:
percentage = (film_width + edge_trim) / Extruder.max_width
speed = Extruder.max_speed * percentage
speeds.append(speed)
a.append(Extruder.name + ' : ' + str(round(speed, 2)) + 'kg\'s/h')
max_speed = max(speeds)
ave_speed = sum(speeds) / len(speeds)
ave_time = float(quantity) / ave_speed * 60.0
max_time = float(quantity) / max_speed * 60.0
if math.floor(Extruder.max_width / (film_width + edge_trim)) >= 2:
number_up = math.floor(Extruder.min_width / (film_width + edge_trim))
extrusion_width = film_width * number_up
percentage = extrusion_width / Extruder.max_width
speed = percentage * Extruder.max_speed
speeds.append(speed)
c.append(Extruder.name + ' : can run this film ' + str(number_up) + ' up and ')
elif film_type == "Double Wound Sheeting":
film_type = "DWS"
for extruder in extruders:
if film_width + (edge_trim * 2) < Extruder.min_width:
b.append(Extruder.name + ' : Too narrow for extruder')
elif film_width + (edge_trim * 2) > Extruder.max_width:
b.append(Extruder.name + ' : Too wide for extruder')
else:
extrusion_width = (edge_trim * 2) + film_width
percentage = Extrusion_width / Extruder.max_width
speed = extruder.max_speed * percentage
speeds.append(speed)
a.append(Extruder.name + ' : ' + str(round(speed, 2)) + 'kg\'s/h - film width ' + str(film_width + (edge_trim * 2)) + 'mm')
max_speed = max(speeds)
ave_speed = sum(speeds) / len(speeds)
ave_time = float(quantity) / ave_speed * 60.0
max_time = float(quantity) / max_speed * 60.0
if math.floor(Extruder.max_width / (film_width + (edge_trim * 2))) >= 2:
number_up = math.floor(Extruder.max_width / (film_width + (edge_trim * 2)))
c.append('This can run ' + str(number_up) + ' up')
else:
print('Not Within ' + Extruder.name + '\'s capabilities')
elif film_type == "J-Fold Sheeting":
film_type = "JFS"
for extruder in extruders:
if film_width < Extruder.min_width:
b.append(Extruder.name + ' : Too narrow for extruder')
elif film_width > Extruder.min_width:
b.append(Extruder.name + ' : Too wide for extruder')
else:
percentage = film_width / Extruder.min_width
speed = Extruder.max_speed * percentage
speeds.append(speed)
a.append(Extruder.name + ' : ' + str(round(speed, 2)) + 'kg\'s/h')
max_speed = max(speeds)
ave_speed = sum(speeds) / len(speeds)
ave_time = float(quantity) / ave_speed * 60.0
max_time = float(quantity) / max_speed * 60.0
if film_width - float(strip_out) * 2 < extruder.min_width:
extrusion_width = (film_width - strip_out) * 2
percentage = Extrusion_width / Extruder.max_width
speed = Extruder.max_speed * percentage
speeds.append(speed)
c.append(Extruder.name + ' : Can run this film 2 up Staggered at ' + str(round(speed, 2)) + 'kg\'s/h')
else:
c.append("Too wide for 2 up")
if (film_width * 2) < Extruder.max_width:
percentage = (film_width * 2) / Extruder.max_width
speed = Extruder.max_speed * percentage
speeds.append(speed)
d.append(Extruder.name + ' : Can run this film with strip out at ' + str(round(speed, 2)) + 'kg\'s/h')
strip_out_percent = (strip_out * 2) / (film_width * 2)
strip_out_weight = float(qty) * float(strip_out_percent)
strip_out = ("{} : Strip out scrap weight will be: {} kg\'s").format(Extruder.name, round(strip_out_weight, 2))
e.append(Extruder.name + ' : Strip out = ' + str(strip_out_percent * 100) + '%')
elif film_type == "Gussetted Layflat Tubing":
film_type = "GLFT"
elif film_type == "Centrefold Sheeting":
film_type = "CFS"
for extruder in extruders:
# Check the width is ok and then check if film can be run 2 up on extruder.
if film_width < extruder.min_width:
b.append(extruder.name + ' : Too narrow for extruder')
elif film_width > extruder.max_width:
b.append(extruder.name + ' : Too wide for extruder')
else:
percentage = film_width / extruder.max_width
speed = extruder.max_speed * percentage
speeds.append(speed)
c.append(extruder.name + ' : ' + str(round(speed, 2)) + 'kg\'s/h')
max_speed = max(speeds)
ave_speed = sum(speeds) / len(speeds)
ave_time = float(quantity) / ave_speed * 60.0
max_time = float(quantity) / max_speed * 60.0
# Check if film can be run 2 up
if film_width * 2 < extruder.max_width:
percentage = (film_width * 2) / extruder.max_width
speed = extruder.max_speed * percentage
speeds.append(speed)
d.append(extruder.name + ' 2 up : ' + str(round(speed, 2)) + 'kg\'s/h')
else:
film_type = "Invalid Film Type"
m = a
n = b
o = c
g = str(round(ave_speed, 2)) + 'kg\'s/h'
h = str(datetime.timedelta(minutes=ave_time))
i = str(datetime.timedelta(minutes=30))
j = str(round(max_speed, 2)) + 'kg\'s/h'
k = str(datetime.timedelta(minutes=max_time))
return render(request, 'calculations/result.html', {'a':a, 'b':b, 'c':c, 'd':d, 'e':e, 'g':g, 'h':h, 'i':i, 'j':j, 'k':k, 'm':m, 'n':n, 'o':o})
Check your capitalization -- you're iterating over each extruder
but trying to access attributes of Extruder
.检查您的大小写 - 您正在迭代每个
extruder
但试图访问Extruder
的属性。 Try replacing Extruder.min_width
with extruder.min_width
and so forth.尝试用
extruder.min_width
替换Extruder.min_width
等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.