sqlmodel/docs/tutorial/fastapi/teams.md
kurtportelli a2cda8377f
📝 Update docs for models for updating, id should not be updatable (#335)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
2022-08-28 01:43:42 +02:00

3.6 KiB

FastAPI Path Operations for Teams - Other Models

Let's now update the FastAPI application to handle data for teams.

This is very similar to the things we have done for heroes, so we will go over it quickly here.

We will use the same models we used in previous examples, with the relationship attributes, etc.

Add Teams Models

Let's add the models for the teams.

It's the same process we did for heroes, with a base model, a table model, and some other data models.

We have a TeamBase data model, and from it, we inherit with a Team table model.

Then we also inherit from the TeamBase for the TeamCreate and TeamRead data models.

And we also create a TeamUpdate data model.

{!./docs_src/tutorial/fastapi/teams/tutorial001.py[ln:1-28]!}

# Code below omitted 👇
👀 Full file preview
{!./docs_src/tutorial/fastapi/teams/tutorial001.py!}

We now also have relationship attributes. 🎉

Let's now update the Hero models too.

Update Hero Models

# Code above omitted 👆

{!./docs_src/tutorial/fastapi/teams/tutorial001.py[ln:31-57]!}

# Code below omitted 👇
👀 Full file preview
{!./docs_src/tutorial/fastapi/teams/tutorial001.py!}

We now have a team_id in the hero models.

Notice that we can declare the team_id in the HeroBase because it can be reused by all the models, in all the cases it's an optional integer.

And even though the HeroBase is not a table model, we can declare team_id in it with the foreign key parameter. It won't do anything in most of the models that inherit from HeroBase, but in the table model Hero it will be used to tell SQLModel that this is a foreign key to that table.

Relationship Attributes

Notice that the relationship attributes, the ones with Relationship(), are only in the table models, as those are the ones that are handled by SQLModel with SQLAlchemy and that can have the automatic fetching of data from the database when we access them.

# Code above omitted 👆

{!./docs_src/tutorial/fastapi/teams/tutorial001.py[ln:7-57]!}

# Code below omitted 👇
👀 Full file preview
{!./docs_src/tutorial/fastapi/teams/tutorial001.py!}

Path Operations for Teams

Let's now add the path operations for teams.

These are equivalent and very similar to the path operations for the heroes we had before, so we don't have to go over the details for each one, let's check the code.

# Code above omitted 👆

{!./docs_src/tutorial/fastapi/teams/tutorial001.py[ln:139-193]!}

# Code below omitted 👇
👀 Full file preview
{!./docs_src/tutorial/fastapi/teams/tutorial001.py!}

Using Relationships Attributes

Up to this point, we are actually not using the relationship attributes, but we could access them in our code.

In the next chapter, we will play more with them.

Check the Docs UI

Now we can check the automatic docs UI to see all the path operations for heroes and teams.

Interactive API docs UI

Recap

We can use the same patterns to add more models and API path operations to our FastAPI application. 🎉