简体   繁体   English

如何在数据库 class 上运行 function 而不是 Z2B9AFB89A6ACC1075B159BFCA3 中的 views.py 中的 class

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM