Метод пользовательского менеджера Django, возвращающий объект по запросу значения
Я пытаюсь сделать метод для модели "Clase", который возвращает "Clase", чье значение "codigo" соответствует аргументу. На данный момент у меня есть следующее:
class CodigoClaseManager(models.Manager):
"""
Custom manager that enables geting a Clase by codigo
"""
def get_by_code(self, code):
return super(CodigoClaseManager,self).get_query_set().filter(codigo=code)
class Clase(models.Model):
nombre = models.CharField(max_length=100)
codigo = models.CharField(max_length=100)
byCode = CodigoClaseManager
def __str__(self):
return self.nombre
class Meta:
managed = True
db_table = 'clases'
Моя проблема в том, что когда я пытаюсь вызвать этот метод get_by_value, он всегда говорит мне, что аргумент "self" отсутствует.
>>> Clase.byCode.get_by_code(code="1234")
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: get_by_code() missing 1 required positional argument: 'self'
Я использую неправильный подход или это ошибка в моем коде? Я недавно начал изучать django и буду очень признателен за помощь, спасибо.
Вы должны построить объект CodigoClaseManager, поэтому вызовите конструктор:
class Clase(models.Model):
nombre = models.CharField(max_length=100)
codigo = models.CharField(max_length=100)
byCode = CodigoClaseManager() # 🖘 call the constructor
# …