Как вызвать родительский метод от ребенка через ForeignKeyField в peewee? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть два класса:

class A(Base_Model):
    def ping(self):
        print("Ping!")

class B(Base_Model):
    __A_reference = peewee.ForeignKeyField(A, null=True)
    def test_ping(self):
        self.__A_reference.ping()

Я инициализирую базу данных, создаю обе таблицы и пытаюсь запустить B.test_ping(), но безрезультатно.

Попытался изменить способ, который я указалвнешний ключ должен быть самоссылающимся __A_reference = peewee.ForeignKeyField("self", null=True, backref="Bs"), но опять же бесполезен.

Попытка просмотреть кучу примеров кода, но никогда не кажется, что (дочерний) объект, который имеет внешнийКлюч фактически использует его для вызова некоторого метода из родительского объекта.

1 Ответ

0 голосов
/ 30 мая 2018

Я не понимаю, почему это сбивает с толку ... доступ к B .__ A_reference вернет связанный экземпляр A:

In [1]: from peewee import *

In [2]: db = SqliteDatabase(':memory:')

In [3]: class A(Model):
   ...:     def ping(self):
   ...:         print('ping')
   ...:     class Meta:
   ...:         database = db
   ...:         

In [4]: class B(Model):
   ...:     a = ForeignKeyField(A)
   ...:     class Meta:
   ...:         database = db
   ...:         

In [5]: db.create_tables([A, B])

In [6]: a = A.create()

In [7]: b = B.create(a=a)

In [8]: b.a.ping()
ping
...