Refactor models

This commit is contained in:
François Voron
2021-08-29 17:00:45 +02:00
parent a95b6c45dd
commit 83873338f3
3 changed files with 41 additions and 14 deletions

View File

@ -31,7 +31,7 @@ class UserCreate(models.BaseUserCreate):
pass pass
class UserUpdate(User, models.BaseUserUpdate): class UserUpdate(models.BaseUserUpdate):
pass pass
@ -39,7 +39,34 @@ class UserDB(User, models.BaseUserDB):
pass 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 ## Next steps

View File

@ -1,7 +1,7 @@
import uuid import uuid
from typing import List, Optional, TypeVar from typing import List, Optional, TypeVar
from pydantic import Field, UUID4, BaseModel, EmailStr from pydantic import UUID4, BaseModel, EmailStr, Field
class CreateUpdateDictModel(BaseModel): class CreateUpdateDictModel(BaseModel):
@ -25,10 +25,10 @@ class BaseUser(CreateUpdateDictModel):
"""Base User model.""" """Base User model."""
id: UUID4 = Field(default_factory=uuid.uuid4) id: UUID4 = Field(default_factory=uuid.uuid4)
email: Optional[EmailStr] = None email: EmailStr
is_active: Optional[bool] = True is_active: bool = True
is_superuser: Optional[bool] = False is_superuser: bool = False
is_verified: Optional[bool] = False is_verified: bool = False
class BaseUserCreate(CreateUpdateDictModel): class BaseUserCreate(CreateUpdateDictModel):
@ -39,15 +39,15 @@ class BaseUserCreate(CreateUpdateDictModel):
is_verified: Optional[bool] = False is_verified: Optional[bool] = False
class BaseUserUpdate(BaseUser): class BaseUserUpdate(CreateUpdateDictModel):
password: Optional[str] password: Optional[str]
email: Optional[EmailStr]
is_active: Optional[bool]
is_superuser: Optional[bool]
is_verified: Optional[bool]
class BaseUserDB(BaseUser): class BaseUserDB(BaseUser):
email: EmailStr
is_active: bool
is_superuser: bool
is_verified: bool
hashed_password: str hashed_password: str
class Config: class Config:

View File

@ -33,8 +33,8 @@ class UserCreate(models.BaseUserCreate):
first_name: Optional[str] first_name: Optional[str]
class UserUpdate(User, models.BaseUserUpdate): class UserUpdate(models.BaseUserUpdate):
pass first_name: Optional[str]
class UserDB(User, models.BaseUserDB): class UserDB(User, models.BaseUserDB):