在Django模型中,当排名基于另一个属性装饰器时,如何计算属性装饰器中的排名?

2024-09-30 14:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新的程序员,对Django/Python非常陌生。我正在建立一个应用程序,整合赛艇比赛的结果。我有以下型号型号.py. 你知道吗

class Crew(models.Model):
    name = models.CharField(max_length=50)
    id = models.IntegerField(primary_key=True)
    composite_code = models.CharField(max_length=10, blank=True, null=True)
    club = models.ForeignKey(Club, related_name='crews',
    on_delete=models.CASCADE)
    rowing_CRI = models.IntegerField(blank=True, null=True)
    rowing_CRI_max = models.IntegerField(blank=True, null=True)
    sculling_CRI = models.IntegerField(blank=True, null=True)
    sculling_CRI_max = models.IntegerField(blank=True, null=True)
    event = models.ForeignKey(Event, related_name='crews',
    on_delete=models.CASCADE)
    status = models.CharField(max_length=20)
    penalty = models.IntegerField(default=0)
    handicap = models.IntegerField(default=0)
    manual_override_minutes = models.IntegerField(default=0)
    manual_override_seconds = models.IntegerField(default=0)
    manual_override_hundredths_seconds = models.IntegerField(default=0)
    bib_number = models.IntegerField(blank=True, null=True)
    band = models.ForeignKey(Band, related_name='bands',
    on_delete=models.CASCADE, blank=True, null=True)

    @property
    def raw_time(self):
        if len(self.times.filter(tap='Start')) > 1 or len(self.times.filter(tap='Finish')) > 1:
            return 0

        start = self.times.get(tap='Start').time_tap
        end = self.times.get(tap='Finish').time_tap
        return end - start

    @property
    def race_time(self):
        # The race time can include the penalty as by default it is 0
        return self.raw_time + self.penalty*1000

    @property
    def event_band(self):
        if not self.band:
            return self.event.name

        return str(self.event.name) + ' ' + str(self.band.name)

class RaceTime(models.Model):
    sequence = models.IntegerField()
    bib_number = models.IntegerField(blank=True, null=True,)
    tap = models.CharField(max_length=10)
    time_tap = models.BigIntegerField()
    crew = models.ForeignKey(Crew, related_name='times',
    on_delete=models.SET_NULL, blank=True, null=True,)

我想创建两个附加属性。一个在所有组员中按race_time()排列组员,另一个在其event_band()内排列组员。你知道吗

下面是我第一次尝试将整体排名创建为一个名为rank的属性:

@property
def rank(self):
    crews = Crew.objects.filter(status__in=('Accepted')).filter(race_time__isnull=False)
    race_times = list(map(lambda crew: crew.race_time, crews)).sort()
    rank = race_times.index(self.race_time) + 1
    return rank

此代码失败,出现以下错误:

内部服务器错误:/api/crews/ 回溯(最近一次呼叫): 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/core/handlers/例外.py,第34行,在内部 response=获取响应(请求) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/core/handlers/基本.py“,第115行,在\u get \u response中” 响应=self.process\u异常\u by \u中间件(e,请求) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/core/handlers/基本.py“,第113行,在\u get \u response中” response=wrapped\u callback(请求,*回调参数,**回调参数) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/views/decorators/csrf.py公司“,第54行,在环绕视图中” 返回视图函数(*args,**kwargs) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/views/generic/基本.py“,第71行,视图中 返回自行调度(请求,*args,**kwargs) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/视图.py“,第505行,发送中 响应=self.handle\u异常(exc公司) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/视图.py,第465行,在handle\u exception中 self.raise\u uncaught\u异常(exc公司) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/视图.py,第476行,在raise\u uncaught\u exception中 提升exc 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/视图.py,第502行,发送中 响应=处理程序(请求,*args,**kwargs) 文件“/Users/sianalcock/Development/pairshead results/results”/视图.py“,第82行,在get中” 返回响应(序列化程序.data)#将JSON发送到客户端 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/序列化程序.py,第757行,在数据中 ret=super().数据 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/序列化程序.py,第261行,在数据中 自身数据=自组织表示法(自身实例) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/序列化程序.py“,第675行,表示为” self.child.to\u表示(item)对于iterable中的item 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/序列化程序.py,第675行 self.child.to\u表示(item)对于iterable中的item 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/序列化程序.py“,第513行,表示为” 属性=field.get\u属性(实例) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/字段.py“,第443行,在get\u属性中” 返回get\u属性(实例,自源属性) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/rest\u framework/字段.py“,第93行,在get\u attri中”但是 instance=getattr(实例,attr) 文件“/Users/sianalcock/Development/pairshead results/results”/型号.py“,第63行,排名 船员=乘员对象过滤器(status\u in='Accepted').filter(race\u time\uu isnull=False) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/查询.py,第892行,在过滤器中 返回self.\u filter\u或\u exclude(False,*args,**kwargs) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/查询.py“,行910,在\u filter\u或\u exclude中” 克隆.查询.添加(Q(*args,**kwargs)) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sql/查询.py“,第1290行,在add\u q中” 子句,u=self.\u add \u q(q\u object,自用别名) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sql/查询.py“,第1318行,在\u add\u q中” split\u subq=split\u subq,simple\u col=simple\u col, 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sql/查询.py,第1190行,内置过滤器 查找、部件、引用的表达式=self.solve\查找\类型(参数) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sql/查询.py,第1049行,在solve\u lookup\u类型中 _,字段,\,查找\u部分=self.names\u到\u路径(u分裂,self.get\u元()) 文件“/Users/sianalcock/.local/share/virtualenvs/pairshead-results-3ZeqXKPg/lib/python3.7/site-packages/django/db/models/sql/查询.py,第1420行,在名称\u到\u路径中 “选项有:%s”%(名称,,“.join(可用))) django.core.exceptions异常.FieldError:无法将关键字“race\u time”解析为字段。选择包括:乐队、乐队id、围嘴号码、俱乐部、俱乐部id、参赛者、组合代码、赛事、赛事id、残障、id、手动超驰百分之一秒、手动超驰分钟、手动超驰秒、姓名、处罚、原始时间、赛艇CRI、赛艇CRI max、赛艇CRI max、赛艇CRI max、赛艇CRI max、状态、仅时间、次数 [2019年9月30日13:46:08]“GET/api/crews/HTTP/1.1”500 23531

我说的对吗?你知道吗


Tags: 文件pyselftruesharemodelslibpackages