PonyORM извлекает объект из класса Entity - PullRequest
0 голосов
/ 23 октября 2019

Допустим, у меня есть эти два класса:

class TeamMember(db.Entity):
    member_id= PrimaryKey(int, auto=True)
    name = Required(str)
    team = Required('Team')

class Team(db.Entity):
    team_id= PrimaryKey(int, auto=True)
    name = Required(str)
    team_members = Set(TeamMember)

Я хочу выбрать всех членов TeamMeber, входящих в конкретную команду (например, team_id == 1). Запрос будет выглядеть примерно так (C1):

TeamMember.select(lambda member: member.team == 1)[:]

Если я напишу это так, я получу ошибку ниже:

Incomparable types 'Team' and 'int' in expression: member.team == 1

С другой стороны, я могу написатьэто и будет работать (C2):

TeamMember.select(lambda member: member.team == Team[1])[:]

Но я не хочу писать это так, потому что я хочу создать универсальную функцию, которая будет работать для каждого класса Entity:

def get_instances_from_db(classname, classname_var, var_value):
    """
    :param classname:  name of class
    :param classname_var: name of class variable to search by
    :param var_value: value of class variable
    :return:
    """
    return classname.select(lambda v: getattr(v, classname_var) == var_value)[:]

Вышеописанный метод будет работать для переменной, которая не относится к другому классу Entity, например:

members = get_instances_from_db(TeamMember, "name", "some_team_member_name")

Наконец, мой вопрос: можно ли задать запрос для поиска по целому числу,а не объектом Entity. Или есть способ использовать строку 'C1'?

Надеюсь, я достаточно ясен! :)

...