From 44cbfc4f59d7208dc44d2a090b91c798f4146ede Mon Sep 17 00:00:00 2001 From: Kurbanov Bulat Date: Tue, 28 Dec 2021 23:16:31 +0300 Subject: [PATCH] Fix user creating --- src/app/serializers.py | 7 ++++--- src/app/views.py | 10 ++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/app/serializers.py b/src/app/serializers.py index aef1711..054dcae 100644 --- a/src/app/serializers.py +++ b/src/app/serializers.py @@ -11,15 +11,16 @@ class LanguageDetail(CreateLanguage): class UserBase(BaseModel): - user_id: int last_name: constr(max_length=64) # type: ignore first_name: constr(max_length=64) # type: ignore username: constr(max_length=32) # type: ignore + source: constr(max_length=32) # type: ignore -class UserCreateOrUpdate(BaseModel): +class UserCreateOrUpdate(UserBase): allowed_langs: list[str] -class UserDetail(UserCreateOrUpdate): +class UserDetail(BaseModel): + user_id: int allowed_langs: list[LanguageDetail] diff --git a/src/app/views.py b/src/app/views.py index 1292ca2..5b13ca8 100644 --- a/src/app/views.py +++ b/src/app/views.py @@ -34,7 +34,7 @@ async def get_user(user_id: int): @users_router.post("/{user_id}", response_model=UserDetail) -async def get_or_update_user(user_id: int, data: UserCreateOrUpdate): +async def create_or_update_user(user_id: int, data: UserCreateOrUpdate): data_dict = data.dict() user_data = await User.objects.select_related("allowed_langs").get_or_none(user_id=user_id) @@ -42,16 +42,18 @@ async def get_or_update_user(user_id: int, data: UserCreateOrUpdate): allowed_langs = data_dict.pop("allowed_langs") if user_data is None: - return User.objects.create(**data.dict()) + user_data = await User.objects.select_related("allowed_langs").create(**{**data_dict, "user_id": user_id}) else: - user_data.update_from_dict(data.dict()) + user_data.update_from_dict(data_dict) - user_data.allowed_langs.clear() + await user_data.allowed_langs.clear() # type: ignore langs = await Language.objects.filter(code__in=allowed_langs).all() for lang in langs: await user_data.allowed_langs.add(lang) + + await user_data.update() return user_data