From 9fdb209754bf55f6c1eb895955dfc3222393966d Mon Sep 17 00:00:00 2001 From: VladislavOstapov Date: Thu, 6 Apr 2023 10:47:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=B2=D0=B0=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=8E=D0=B7=D0=B5=D1=80=D0=B0,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=D1=80=D0=BE=D0=BA=20=D0=B2=20=D0=B0=D0=B4?= =?UTF-8?q?=D0=BC=D0=B8=D0=BD=D0=BA=D1=83,=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8F?= =?UTF-8?q?=20"=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=84=D0=BE=D1=80=D0=BC=D0=BE=D0=B9"=20?= =?UTF-8?q?=D0=B2=20=D0=B0=D0=BA=D0=BA=D0=B0=D1=83=D0=BD=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/admin.py | 7 +++++++ api/api_methods.py | 15 ++++++++++++--- api/models.py | 6 ++++-- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/api/admin.py b/api/admin.py index 86093b9..a406125 100755 --- a/api/admin.py +++ b/api/admin.py @@ -9,6 +9,13 @@ class AccountAdmin(admin.ModelAdmin): readonly_fields = ['id', 'register_datetime'] +@admin.register(AccountAvatar) +class AccountAvatarAdmin(admin.ModelAdmin): + # fields = ['name', 'surname', 'phone', 'email', 'register_datetime'] + list_display = ['id', 'account', 'photo', 'profile_background'] + readonly_fields = ['id'] + + @admin.register(Media) class MediaAdmin(admin.ModelAdmin): list_display = ['id', 'owner', 'original_name', 'size'] diff --git a/api/api_methods.py b/api/api_methods.py index 19be46b..60433f4 100755 --- a/api/api_methods.py +++ b/api/api_methods.py @@ -54,6 +54,7 @@ class ApiAccount: "city": {"code": user.city, "name": CITIES_CHOICES[user.city]} if user.city is not None else None, "register_datetime": int(time.mktime(user.register_datetime.timetuple())), "role": user.role, + "confirmed": user.confirmed } if hasattr(user, 'accountavatar'): @@ -198,7 +199,7 @@ class ApiAccount: returns="Вернет основную информацию о пользователе, иначе ошибки") async def edit(access_token, name, surname, about, executor_type, executor_inn, city, photo, profile_background): user = access_token.user - executor_need_save, need_save = False, False + executor_need_save, need_save, avatar_need_save = False, False, False if name is not None: user.name = name @@ -225,7 +226,7 @@ class ApiAccount: if not hasattr(user, 'accountavatar'): user.accountavatar = await AccountAvatar.objects.acreate(account=user) user.accountavatar.photo = p - need_save = True + avatar_need_save = True else: raise Exception(API_ERROR_NOT_FOUND, 'field "photo" not correct') @@ -238,7 +239,7 @@ class ApiAccount: if not hasattr(user, 'accountavatar'): user.accountavatar = await AccountAvatar.objects.acreate(account=user) user.accountavatar.profile_background = p - need_save = True + avatar_need_save = True else: raise Exception(API_ERROR_NOT_FOUND, 'field "profile_background" not correct') @@ -285,6 +286,14 @@ class ApiAccount: await sync_to_async(user.executoraccount.save)() + if avatar_need_save: + try: + await sync_to_async(user.accountavatar.full_clean)() + except ValidationError as ve: + return _make_model_validation_errors(ve, API_ERROR_USER_MODIFY) + + await sync_to_async(user.accountavatar.save)() + return api_make_response(ApiAccount.make_user_json(user)) @staticmethod diff --git a/api/models.py b/api/models.py index 0e0cd07..1a38fbf 100755 --- a/api/models.py +++ b/api/models.py @@ -41,6 +41,8 @@ class Account(models.Model): register_datetime = models.DateTimeField(default=datetime.now, editable=False) + confirmed = models.BooleanField(default=False, verbose_name="Подтвержденный аккаунт") + @staticmethod def create_user(phone: str, **kvargs): return Account(phone=Account.normalize_phone(phone), **kvargs) @@ -121,9 +123,9 @@ class Media(models.Model): class AccountAvatar(models.Model): account = models.OneToOneField(Account, on_delete=models.CASCADE, verbose_name="Аккаунт") - photo = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True, + photo = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True, blank=True, default=None, related_name="photo", verbose_name="Аватар") - profile_background = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True, default=None, + profile_background = models.ForeignKey(Media, on_delete=models.SET_NULL, null=True, blank=True, default=None, related_name="profile_background", verbose_name="Оформление профиля")