我在使用python / Django时遇到了一个小问题。问题是,我有一个名为'Plantao'的类,以及一个方法'get_ultima_posicao',我希望以下列方式表现: 如果被类调用,比如Plantao.get_ultima_posicao,它应该期望两个参数,一个是强制的,一个是可选的。当由类对象调用时,例如p.get_ultima_posicao(p是Plantao的一个实例),它应该期望的唯一参数是self。
有没有办法做到这一点?
我知道有一种做多边形的方法,在方法头中使用(self,* args),但由于我的一个方法应该是静态的,使用@staticmethod,它没有self作为参数。
修改
In [4]: Plantao.get_ultima_posicao(empresa = 1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/*************************************/<ipython console> in <module>()
TypeError: unbound method get_ultima_posicao() must be called with Plantao instance as first argument (got nothing instead)
In [5]: planta.get_ultima_posicao()
Out[5]: 0
凡planta.empresa = 1.我想让它工作,两次执行返回相同的值
我希望方法def类似于:
def get_ultima_posicao(self):
AND
@staticmethod
def get_ultima_posicao(empresa, data = datetime.date.today()):
修改
好的,这是我的Plantao课程模型:
usuario = models.ForeignKey(Usuario, null=True, blank=True) # user
empresa = models.ForeignKey(Empresa, null=True, blank=True) # department
posicao = models.IntegerField(default=0) # position in queue
data = models.DateField(null=True, blank=True) # date added in queue
所以,我可能知道我想从哪个部门获取用户,为什么我需要检索一个Plantao对象才能搜索它?同时,如果我已经检索过它,如果它已经在Plantao对象中,为什么我需要再次获取该数据?这就是我想要这样做的原因。
修改
希望它可以帮助找到解决方案我在这里添加功能代码:
@staticmethod
def get_ultima_posicao(empresa, data = datetime.date.today()):
if empresa is None:
return 'Empresa invalida'
ultima = Plantao.get_ultimo_fila(empresa = empresa)
plantao = Plantao.objects.filter(data=data, empresa=empresa).order_by('posicao')
usuario = None
for i in plantao:
ultima += 1
i.posicao = ultima
i.save()
if i.usuario.atendimento_pendente() == False and i.usuario.cliente_aguardando() == False and i.usuario.esta_online() == True:
return i.usuario
return "Nenhum usuario disponivel na escala"
def get_ultima_posicao(self):
if self.empresa is None:
return 'Empresa invalida'
ultima = Plantao.get_ultimo_fila(empresa = self.empresa)
plantao = Plantao.objects.filter(data=self.data, empresa=self.empresa).order_by('posicao')
usuario = None
for i in plantao:
ultima += 1
i.posicao = ultima
i.save()
if i.usuario.atendimento_pendente() == False and i.usuario.cliente_aguardando() == False and i.usuario.esta_online() == True:
return i.usuario
return "Nenhum usuario disponivel na escala"