FastAPI + Tortoise ORM + FastAPI Users (Python) - Relationship - Many To Many(FastAPI+Tortoise ORM+FastAPI用户(Python)-关系-多对多)
问题描述
我正在使用FastAPI、Tortoise ORM和FastAPI用户制作一个API来学习。基本上,我从OpenWeather API获取城市天气数据,并使用Tortoise ORM存储在SQLite数据库中。我对FastAPI用户进行了身份验证。
我使用的是外键,关系运行良好。但现在我想要一些改变(一种改进)。我希望每个用户都有他们的项目,并且在登录并访问终结点(@router.get("/me/onlyitems/", response_model=List[schemas.Card_Pydantic])
)之后,它只接收他们的项目。
我认为为每个用户重复项目信息(使用另一个ID)并不理想,不同的用户访问同一项目会更好。
我认为这将是一个多对多的关系,但我不知道如何建立这种关系并使用FastAPI获得它。
我想过创建一个只有UserID和CityID(以及一个自动递增ID)的中间表,并使用它来获取相关数据,但我不知道这是最好的方法还是可行的。
我尝试向Tortoise文档学习,但我找不到我需要的部分,也无法理解文档中的一些复杂示例和部分内容。
我使用的是包的更新版本和Python3.9.4
好的,让我展示一些代码:
Models.py
我尝试更改我的所有者字段及其与UserModel的关系:
我不知道它是否正确,我无法使其工作,但问题可能出在其他地方。
我的用户终结点创建项目:
此处使用的CRUD函数(用于创建项目):
我的终结点以获取用户拥有的项目:
我的CRUD函数是:
如何更改才能获得用户需要访问的卡?我认为我不能使用按Owner_id筛选(好的,如果我可以创建我的中间表,我可以,但不知道如何做和获取数据),但是我不知道如何建立关系来将用户链接到他添加的项目,同时其他用户访问相同的项目。
此代码运行良好(我使用的是nuxt.js前端),直到有重复的城市...
处理它的最佳方式是什么?如何处理?
谢谢,迭戈。
推荐答案
我解决了。我认为Tortoise文档有点令人困惑,但我找到了如何创建关系和检索数据。
模型:(简化版)
through="card_usermodel"
将使用卡ID和所有者ID创建中间表,它将定义关系。
进行数据操作:
基本就是这样。我还更改了一些平凡的模型,以验证响应。
这篇关于FastAPI+Tortoise ORM+FastAPI用户(Python)-关系-多对多的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!