我看了龜-ORM的檔案,但是,至少對我來說,檔案不明確的關鍵字related_name在tortoise.field.ForeignKeyField。它僅說明:
related_name:
The attribute name on the related model to reverse resolve the foreign key.
我正在使用 Aerich(Tortoise-ORM 遷移管理器),但我看不到對related_name模型中使用的's的單個參考。我還檢查了資料庫Postgres,找不到任何有關它的參考。也許我不知道去哪里看。
不幸的是,在 Tortoise-ORM 檔案中沒有關于此的簡單實用示例。
我有一個非常簡單的模型,例如:
import tortoise
class Toy(tortoise.models.Model):
id = tortoise.fields.IntField(pk=True)
name = tortoise.fields.CharField(max_length=32)
owner = tortoise.fields.ForeignKeyField("models.Person", related_name='toys_owner')
builder = tortoise.fields.ForeignKeyField("models.Person", related_name='toys_builder')
class Person(tortoise.models.Model):
id = tortoise.fields.IntField(pk=True)
name = tortoise.fields.CharField(max_length=32)
async def main():
await tortoise.Tortoise.init(
db_url='sqlite://:memory:',
modules={'models': ["__main__"]}
)
await tortoise.Tortoise.generate_schemas()
person_a = await Person.create(name="Gepheto")
person_b = await Person.create(name="Fairy")
person_c = await Person.create(name="Nobody")
pinocchio = await Toy.create(name="Pinocchio", builder=person_a, owner=person_b)
print(pinocchio)
await tortoise.Tortoise.close_connections()
if __name__ == '__main__':
tortoise.run_async(main())
related_name在這方面如何運作?
uj5u.com熱心網友回復:
由于烏龜的靈感來自 Django,您可以查看Django 檔案以獲得類似的答案。當您想要訪問 Person's Toys 時使用它。
person_a.toys_builder.all()
這就是為什么它被稱為“反向決議”事件。
uj5u.com熱心網友回復:
經過幾次嘗試...
該related_name值可用作要在外部模型中參考的名稱以反向訪問它。
讓我們首先顯示前進的方向。在給出的示例中,從玩具模型實體(在本例中為pinocchio),找到他的builder或owner:
print(f"This is pinnochio owner {pinnochio.owner.name}")
print(f"This is pinnochio builder {pinnochio.owner.builder}")
將related_name允許我們在做相反的方向一樣,從一個owner或builder,找到他/她的玩具和疊代。例如:
person_b_owned_toys = await person_b.toys_owner.all()
for toy in person_b_owned_toys:
print(toy.name)
除了方法all(),filter()也可以使用方法。QuerySet僅回傳與過濾器匹配的條目。例如:
person_b_owned_toys = await person_b.toys_owner.filter(name='Pinocchio')
for toy in person_b_owned_toys:
print(toy.name)
反方向的有效keysonfilter引數是來自Toys,而不是來自Person。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343255.html
標籤:Python PostgreSQL 龟甲
