У меня небольшая проблема при работе с python / Django. Дело в том, что у меня есть класс, называемый Plantao, и метод get_ultima_posicao, который я хотел вести следующим образом:
Если вызывается классом, как Plantao.get_ultima_posicao, он должен ожидать два параметра, один обязательный, один необязательный. И когда он вызывается объектом класса, например p.get_ultima_posicao (p является экземпляром Plantao), единственным параметром, который он должен ожидать, будет self.
Есть ли способ сделать это?
Я знаю, что есть способ сделать что-то вроде полиморфизма, используя (self, * args) в заголовке метода, но, поскольку один из моих методов должен быть статическим, используя @staticmethod, он не имеет self в качестве параметра.
EDIT
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()):
EDIT
Хорошо, вот моя модель для класса 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? Вот почему я хочу сделать это.
EDIT
В надежде, что это поможет найти решение, я добавляю здесь коды функций:
@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"