From 83873338f3cb3f10c6886abe51b946e830a7eb9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Voron?= Date: Sun, 29 Aug 2021 17:00:45 +0200 Subject: [PATCH] Refactor models --- docs/configuration/model.md | 31 +++++++++++++++++++++++++++++-- fastapi_users/models.py | 20 ++++++++++---------- tests/conftest.py | 4 ++-- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/docs/configuration/model.md b/docs/configuration/model.md index 799c4668..10aa9962 100644 --- a/docs/configuration/model.md +++ b/docs/configuration/model.md @@ -31,7 +31,7 @@ class UserCreate(models.BaseUserCreate): pass -class UserUpdate(User, models.BaseUserUpdate): +class UserUpdate(models.BaseUserUpdate): pass @@ -39,7 +39,34 @@ class UserDB(User, models.BaseUserDB): pass ``` -You can of course add your own properties there to fit to your needs! +### Adding your own fields + +You can of course add your own properties there to fit to your needs. In the example below, we add a required string property, `first_name`, and an optional date property, `birthdate`. + +```py +import datetime + +from fastapi_users import models + + +class User(models.BaseUser): + first_name: str + birthdate: Optional[datetime.date] + + +class UserCreate(models.BaseUserCreate): + first_name: str + birthdate: Optional[datetime.date] + + +class UserUpdate(models.BaseUserUpdate): + first_name: Optional[str] + birthdate: Optional[datetime.date] + + +class UserDB(User, models.BaseUserDB): + pass +``` ## Next steps diff --git a/fastapi_users/models.py b/fastapi_users/models.py index 9f75bd3f..5693803b 100644 --- a/fastapi_users/models.py +++ b/fastapi_users/models.py @@ -1,7 +1,7 @@ import uuid from typing import List, Optional, TypeVar -from pydantic import Field, UUID4, BaseModel, EmailStr +from pydantic import UUID4, BaseModel, EmailStr, Field class CreateUpdateDictModel(BaseModel): @@ -25,10 +25,10 @@ class BaseUser(CreateUpdateDictModel): """Base User model.""" id: UUID4 = Field(default_factory=uuid.uuid4) - email: Optional[EmailStr] = None - is_active: Optional[bool] = True - is_superuser: Optional[bool] = False - is_verified: Optional[bool] = False + email: EmailStr + is_active: bool = True + is_superuser: bool = False + is_verified: bool = False class BaseUserCreate(CreateUpdateDictModel): @@ -39,15 +39,15 @@ class BaseUserCreate(CreateUpdateDictModel): is_verified: Optional[bool] = False -class BaseUserUpdate(BaseUser): +class BaseUserUpdate(CreateUpdateDictModel): password: Optional[str] + email: Optional[EmailStr] + is_active: Optional[bool] + is_superuser: Optional[bool] + is_verified: Optional[bool] class BaseUserDB(BaseUser): - email: EmailStr - is_active: bool - is_superuser: bool - is_verified: bool hashed_password: str class Config: diff --git a/tests/conftest.py b/tests/conftest.py index 7414f950..511ac668 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -33,8 +33,8 @@ class UserCreate(models.BaseUserCreate): first_name: Optional[str] -class UserUpdate(User, models.BaseUserUpdate): - pass +class UserUpdate(models.BaseUserUpdate): + first_name: Optional[str] class UserDB(User, models.BaseUserDB):