class User(AbstractUser): LOGIN_EMAIL = "email" LOGIN_FACEBOOK = "facebook" LOGIN_CHOICES = ((LOGIN_EMAIL, "Email"), (LOGIN_FACEBOOK, "Facebook")) FEMALE = "female" MALE = "male" NOT_SPECIFIED = "not specified" GENDER_CHOICES = ( (FEMALE, "Female"), (MALE, "Male"), (NOT_SPECIFIED, "Prefer not specified"), ) login_method = models.CharField( max_length=30, choices=LOGIN_CHOICES, default=LOGIN_EMAIL, null=True ) bio = models.TextField(max_length=300, blank=True) profile = models.ImageField(upload_to="user_profiles/", null=True, blank=True) gender = models.CharField( max_length=40, choices=GENDER_CHOICES, default=NOT_SPECIFIED, null=True ) objects = core_managers.CustomUserManager() def __str__(self): return self.username
class User(AbstractUser): avatar = models.ImageField(upload_to="avatars", null=True, blank=True) youtube_name = models.CharField(max_length=80, null=True, blank=True) birthdate = models.DateField(null=True, blank=True) objects = managers.CustomUserManager() def get_thumbnail(self): if self.avatar.name != "": return mark_safe( f"<img width='100px' src = '{ self.avatar.url }' /img>") else: return None def get_avatar(self): return self.avatar.url def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def get_age(self): today = date.today() k_age = today.year - self.birthdate.year + 1 return k_age def count_unanswered_suggestions_and_answers(self): result = 0 for suggestion in self.received_suggestions.all(): if suggestion.has_answer is False: result = result + 1 for answer in self.received_answers.all(): result = result + 1 return result
class User(AbstractUser): PREF_BOOKS = "books" PREF_MOVIES = "movies" PREF_CHOICES = ((PREF_BOOKS, "Books"), (PREF_MOVIES, "Movies")) LANG_EN = "english" LANG_KR = "korean" LANG_CHOICES = ((LANG_EN, "English"), (LANG_KR, "Korean")) bio = models.TextField() preference = models.CharField( max_length=20, choices=PREF_CHOICES, default=PREF_MOVIES ) language = models.CharField(max_length=20, choices=LANG_CHOICES, default=LANG_EN) fav_book_cat = models.ForeignKey( "categories.Category", on_delete=models.SET_NULL, null=True, related_name="book_users", ) fav_movie_cat = models.ForeignKey( "categories.Category", on_delete=models.SET_NULL, null=True, related_name="movie_users", ) objects = core_managers.CustomUserManager() def __str__(self): return self.username def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk})
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "남자" GENDER_FEMALE = "여자" GENDER_OTHER = "기타" GENDER_CHOICES = ( (GENDER_MALE, "남자"), (GENDER_FEMALE, "여자"), (GENDER_OTHER, "기타"), ) nickname = models.CharField(max_length=80) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(blank=True) birthdate = models.DateField(blank=True, null=True) nationality = CountryField(blank=True) followers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='followings') objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def __str__(self): return self.nickname
class User(AbstractUser): """Custom User Model""" GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), ) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGING_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGING_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True, null=True) bio = models.TextField(_("bio"), blank=True, default="") birthdate = models.DateField(blank=True, null=True) department = models.CharField(max_length=30, blank=True, null=True) country = CountryField() temperature = models.IntegerField(default=5, blank=True) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) country = CountryField(blank=True, null=True) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( "Verify Bughug Account", strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRUNCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN, "Korean")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGING_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGING_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatas", blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, blank=True) currency = models.CharField(choices=CURRUNCY_CHOICES, max_length=3, blank=True) superhost = models.BooleanField(default=False) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) # objects = core_managers.CustomModelManager() objects = core_managers.CustomUserManager() # 유저 모델이 변경되면 이걸 호출함 # 업데이트 뷰를 써서 유저정보를 업데이트 했을때 변경이 일어난걸알고 이걸 불러 # url에 profile을 pk 값을 가지고 호출해. def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk})
class User(AbstractUser): """ Custom User Model """ ZZIGSA_NOT_YET = "not yet" ZZIGSA_APPROVED = "approved" ZZIGSA_DENIED = "denied" ZZIGSA_CHOICES = ( (ZZIGSA_NOT_YET, "Not yet"), (ZZIGSA_APPROVED, "Approved"), (ZZIGSA_DENIED, "Denied"), ) nickname = models.CharField(max_length=20, unique=True) zzigsa = models.CharField(choices=ZZIGSA_CHOICES, max_length=10, default=ZZIGSA_DENIED) objects = core_managers.CustomUserManager()
class User(AbstractUser): """ Custom User Model """ LOGIN_NAVER = "naver" LOGIN_GOOGLE = "google" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_NAVER, "Naver"), (LOGIN_GOOGLE, "Google"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField(blank=True) birthdate = models.DateField(blank=True, null=True) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_KAKAO) objects = core_managers.CustomUserManager()
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_CHOICE = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), ) profilepic = models.ImageField(upload_to="profilepic", null=True, blank=True) gender = models.CharField(choices=GENDER_CHOICE, max_length=10, null=True, blank=True) bio = models.TextField(default="", blank=True) objects = core_managers.CustomUserManager()
class User(AbstractUser): """Custom User MOdel""" LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGING_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGING_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatars", blank=True) bio = models.TextField(blank=True) zzigsa = models.BooleanField(default=False) login_method = models.CharField( max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL ) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk})
class User(AbstractUser): """ Custom User Model """ # define departure DEPARTURE_DIRECT = "dirc" DEPARTURE_WRITE = "writ" DEPARTURE_TECH = "tech" DEPARTURE_ENTER = "entr" DEPARTURE_WEB = "webc" DEPARTURE_CHOICES = ( (DEPARTURE_DIRECT, "연출부"), (DEPARTURE_WRITE, "구성작가부"), (DEPARTURE_TECH, "방송기술부"), (DEPARTURE_ENTER, "엔터테이너부"), (DEPARTURE_WEB, "웹컨텐츠부"), ) avatar = models.ImageField(null=True, blank=True, upload_to="avatars") departure = models.CharField(choices=DEPARTURE_CHOICES, max_length=6) order = models.IntegerField(null=True) kakaotalk = models.CharField(max_length=18) upperuser = models.BooleanField(default=False) objects = core_managers.CustomUserManager() def __str__(self): return self.username def clean_username(self): result = self.cleaned_data return result def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk})
class User(AbstractUser): GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LANGUAGE_EN = "english" LANGUAGE_SP = "spanish" LANGUAGE_CN = "chinese" LANGUAGE_KR = "korean" LANGUAGE_CHOICES = ( (LANGUAGE_EN, "Englsih"), (LANGUAGE_SP, "Spanish"), (LANGUAGE_CN, "Chinese"), (LANGUAGE_KR, "Korean"), ) CURRENCY_USD = "usd" CURRENCY_EUR = "eur" CURRENCY_CNY = "cny" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_EUR, "EUR"), (CURRENCY_CNY, "CNY"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_GOOGLE = "google" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_GOOGLE, "Google"), ) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(default="", blank=True) birthdate = models.DateField(null=True, blank=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=10, blank=True) currency = models.CharField(choices=CURRENCY_CHOICES, max_length=10, blank=True) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=120, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret message = render_to_string("emails/verify_email.html", {'secret': secret}) send_mail( "Verify Airbnb Account", message, settings.EMAIL_FROM, [self.email], fail_silently=True, ) self.save()
class User(AbstractUser): """Кастомная модель пользователя""" REQUIRED_FIELDS = () GENDER_MALE = "мужчина" GENDER_FEMALE = "женщина" GENDER_OTHER = "другое" GENDER_CHOISES = ( (GENDER_MALE, _("Мужчина")), (GENDER_FEMALE, _("Женщина")), (GENDER_OTHER, _("Другое")), ) LANGUAGE_ENGLISH = "en" LANGUAGE_RUSSIAN = "ru" LANGUAGE_CHOISES = ( (LANGUAGE_ENGLISH, "English"), (LANGUAGE_RUSSIAN, "Русский"), ) CURRENCY_USD = "usd" CURRENCY_RUB = "rub" CURRENCY_CHOISES = ( (CURRENCY_USD, _("Доллар США")), (CURRENCY_RUB, _("Российский рубль")), ) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_VK = "vk" LOGIN_CHOICES = ((LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_VK, "VK")) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(_("Пол"), max_length=10, choices=GENDER_CHOISES, blank=True) bio = models.TextField(_("О себе"), default="", blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOISES, max_length=2, blank=True, default=LANGUAGE_RUSSIAN) currency = models.CharField(max_length=3, choices=CURRENCY_CHOISES, blank=True, default=CURRENCY_USD) superhost = models.BooleanField(_("Суперхост"), default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", context={"secret": secret}) send_mail( "Подтверждение аккаунта AirBnb", strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( # (DB저장되는값, "밖으로 보여지는 값"), (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ( (LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN, "Korean"), ) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ( (CURRENCY_USD, 'USD'), (CURRENCY_KRW, 'KRW'), ) LOGIN_EMAIL = 'email' LOGIN_GITHUB = 'github' LOGIN_KAKAO = 'kakao' LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) objects = core_managers.CustomUserManager() avatar = models.ImageField(upload_to='avatars', blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) #CharField 한 줄 텍스트, 글자수 제한 bio = models.TextField(blank=True) #TextField 여러줄, 글자 제한 없음 birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN) currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, blank=True, default=CURRENCY_KRW) #super host --> 인증받은 airbnb 호스트 superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=120, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( "Verify Airbnb Account", strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): LOGIN_WEB = "web" LOGIN_KAKAO = "kakao" LOGIN_GOOGLE = "google" LOGIN_CHOICES = ( (LOGIN_WEB, "웹"), (LOGIN_KAKAO, "카카오"), (LOGIN_GOOGLE, "구글"), ) login_method = models.CharField(verbose_name="로그인 방법", max_length=50, choices=LOGIN_CHOICES, default=LOGIN_WEB) email = models.EmailField(verbose_name="이메일", null=True, blank=True) last_name = models.CharField(verbose_name="성", max_length=50, null=True, blank=True) first_name = models.CharField(verbose_name="이름", max_length=50, null=True, blank=True) bio = models.TextField(verbose_name="소개", default="", null=True, blank=True) avatar = models.ImageField(verbose_name="사진", upload_to="avatars", null=True, blank=True) email_verified = models.BooleanField(verbose_name="메일인증", default=False) email_secret = models.CharField(verbose_name="메일인증키", max_length=20, default="", blank=True) objects = core_managers.CustomUserManager() def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) # html 을 스트링으로 바꾼다 send_mail( ("마이비앤비 가입 인증메일 입니다"), strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return # def following_count(self): # following_count = self.target.count() # return following_count # following_count.short_description = "팔로잉" # def follower_count(self): # follower_count = self.follower.count() # return follower_count # follower_count.short_description = "팔로워" def post_count(self): post_count = self.post_user.count() return post_count post_count.short_description = "포스트" def like_count(self): like_count = self.likes.count() return like_count like_count.short_description = "좋아요" # def comment_count(self): # comment_count = self.comments.count() # return comment_count # comment_count.short_description = "작성댓글" def __str__(self): return self.username class Meta: verbose_name = "사용자" verbose_name_plural = "사용자"
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ( (LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN, "Korean"), ) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) # Three types of (user registration -> account verification -> login) REGISTER_LOGIN_EMAIL = "email" REGISTER_LOGIN_GITHUB = "github" REGISTER_LOGIN_KAKAO = "kakao" REGISTER_LOGIN_METHOD = ( (REGISTER_LOGIN_EMAIL, "Email"), (REGISTER_LOGIN_GITHUB, "Github"), (REGISTER_LOGIN_KAKAO, "Kakao"), ) # null is for the database, and blank is for forms on website # null means "empty values are acceptable", and blank also means the same. avatar = models.ImageField(blank=True) # charfield: text field with limit of single line gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) # Adding column(field) to database with empty # textfield: text field without limit bio = models.TextField(default="", blank=True) # bio = models.TextField(null=True) # Or, empty cell in field is accepted birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN) # currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, blank=True) # boolean field is true of false # superhost = models.BooleanField(default=False) # three types of verification method(email, kakao, github) added on database register_login_method = models.CharField(max_length=50, choices=REGISTER_LOGIN_METHOD, default=REGISTER_LOGIN_EMAIL) # email fields added to models.py # emailing with django email_confirmed = models.BooleanField(default=False) # randomly generated numbers for email confirmation email_verification_key = models.CharField(max_length=20, default="", blank=True) objects = core_managers.CustomUserManager() # ------------------- end of the database fields ------------------------------- # email verification method connected with ./views.py def verify_email(self): if self.email_confirmed is False: # using python random generator uuid library, generate random verification key # result is form of tuple, needs to be indexed like list verification_key = uuid.uuid4().hex[:20] # save random verification key to the field self.email_verification_key = verification_key # importing html message from static template, render it to string and use it to send_mail html_message = render_to_string( "emails/verify_email.html", context={"verification_key": verification_key}, ) # send email using django's send_email function: https://docs.djangoproject.com/en/3.0/topics/email/#quick-example # for specific arguments for the function, refer here: https://docs.djangoproject.com/en/3.0/topics/email/#send-mail send_mail( # email title "Verify FitCuration Account", # email content without html tags strip_tags(html_message), # email sender setted up in settings.py as no-reply settings.EMAIL_FROM, # recipient_list [self.email], # not raising error even if it failed, or raise fail_silently=False, # html html_message=html_message, ) # saving verification_key to user's email_verification_key field self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( ("", _("Select gender")), (GENDER_MALE, _("Male")), (GENDER_FEMALE, _("Female")), (GENDER_OTHER, _("Other")), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "ko" LANGUAGE_CHOICES = (("", "Select language"), (LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN, "Korean")) CURRENCY_USD = "usd" CURRENCY_CAD = "cad" CURRENCY_KRW = "krw" CURRENCY_CHOICES = (("", "Select currency"), (CURRENCY_USD, "USD"), (CURRENCY_CAD, "CAD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_FACEBOOK = "facebook" LOGIN_GOOGLE = "google" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_FACEBOOK, "Facebook"), (LOGIN_GOOGLE, "Google"), ) # [null vs blank] # null is purely database-related (for DB), whereas blank is validation-related (for Form) avatar = models.ImageField(_("avatar"), upload_to="avatars", default="", null=True, blank=True) # path: /uploads/avatars gender = models.CharField(_("gender"), choices=GENDER_CHOICES, max_length=10, null=True, blank=True) bio = models.TextField(_("bio"), default="", blank=True) birthdate = models.DateField(_("birthdate"), null=True, blank=True) language = models.CharField(_("language"), choices=LANGUAGE_CHOICES, max_length=2, null=True, blank=True, default=LANGUAGE_ENGLISH) currency = models.CharField(_("currency"), choices=CURRENCY_CHOICES, max_length=3, null=True, blank=True, default=CURRENCY_CAD) # TODO: does we need host field? or we just assume that user having room listing is a host? # host = models.BooleanField(default=False) # host user superhost = models.BooleanField( _("superhost"), default=False) # certified host user by Airbnb email_verified = models.BooleanField(default=False) verification_code = models.CharField( max_length=120, default="", blank=True) # random secret code for email varification login_method = models.CharField(_("login method"), choices=LOGIN_CHOICES, max_length=20, null=True, blank=True, default=LOGIN_EMAIL) # Change default Mnanger for having get_or_none() (models.Manager to core.managers.CustomModelManager)\ """ TODO: bug-fix: creating a new user occurs error ('CustomModelManager' object has no attribute 'normalize_email') objects = core_managers.CustomModelManager() """ # objects = core_managers.CustomModelManager() objects = core_managers.CustomUserManager( ) # Support create_superuser() for EB deployment def get_absolute_url(self): # print(f"users:profile with {self.pk}") return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: # generate random number verification_code = uuid.uuid4().hex[:6] self.verification_code = verification_code # send mail print(f"EMAIL_HOST_USER:{settings.EMAIL_HOST_USER}") print( f"SEND EMAIL for VERIFICATION with {verification_code} from {settings.EMAIL_FROM} to {self.email}" ) html_message = render_to_string( "emails/verify_email.html", { "verification_callback_url": settings.VERIFICATION_CALLBACK_URL, "verification_code": verification_code, }, ) # html_message = ( # "To verify your email, click " # + "<a href='{http://127.0.0.1:8000/users/verify/}{verification_code}'>here</a>" # ) send_mail( "Verify Airbnb Account", strip_tags( html_message ), # it removes all the html tags except for plain text. # f"Verify account, this is your verification code: {verification_code}", settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_CHOICES = ( (GENDER_MALE, "남성"), (GENDER_FEMALE, "여성"), ) MAJOR_1 = "글로벌지역학" MAJOR_2 = "EU전공" MAJOR_3 = "GlobalBusiness" MAJOR_4 = "TESOL영어학전공" MAJOR_5 = "광고PR브랜딩전공" MAJOR_6 = "교육학" MAJOR_7 = "국가리더전공" MAJOR_8 = "국제금융학과" MAJOR_9 = "국제스포츠레저전공" MAJOR_10 = "그리스불가리아학과" MAJOR_11 = "남아프리카어전공" MAJOR_12 = "독일어통번역학과" MAJOR_13 = "동아프리카어전공" MAJOR_14 = "동유럽학대학" MAJOR_15 = "러시아학과" MAJOR_16 = "루마니아어과" MAJOR_17 = "말레이인도네시아어통번역학과" MAJOR_18 = "문화콘텐츠학전공" MAJOR_19 = "바이오메디컬공학전공" MAJOR_20 = "방송영상뉴미디어전공" MAJOR_21 = "브라질학과" MAJOR_22 = "사학과" MAJOR_23 = "산업경영공학과" MAJOR_24 = "생명공학과" MAJOR_25 = "서아프리카어전공" MAJOR_26 = "세계문화예술경영전공" MAJOR_27 = "세르비아크로아티아어과" MAJOR_28 = "수학과" MAJOR_29 = "스페인어통번역학과" MAJOR_30 = "아랍어통번역학과" MAJOR_31 = "아프리카학부" MAJOR_32 = "언론정보전공" MAJOR_33 = "언어인지과학과" MAJOR_34 = "영미권통상통번역전공" MAJOR_35 = "영미문학번역전공" MAJOR_36 = "영어통번역학부" MAJOR_37 = "영어통번역학전공" MAJOR_38 = "우크라이나어과" MAJOR_39 = "융복합소프트웨어전공" MAJOR_40 = "이탈리아어통번역학과" MAJOR_41 = "인도학과" MAJOR_42 = "일본어통번역학과" MAJOR_43 = "전자공학과" MAJOR_44 = "전자물리학과" MAJOR_45 = "정보기록학전공" MAJOR_46 = "정보통신공학과" MAJOR_47 = "정치외교학과" MAJOR_48 = "중국어통번역학과" MAJOR_49 = "중앙아시아학과" MAJOR_50 = "지식콘텐츠전공" MAJOR_51 = "철학과" MAJOR_52 = "체코슬로바키아어과" MAJOR_53 = "컴퓨터전자시스템공학전공" MAJOR_54 = "태국어통번역학과" MAJOR_55 = "통계학과" MAJOR_56 = "폴란드어과" MAJOR_57 = "프랑스학과" MAJOR_58 = "한국학과" MAJOR_59 = "행정학과" MAJOR_60 = "헝가리어과" MAJOR_61 = "화학과" MAJOR_62 = "환경학과" MAJOR_CHOICES = ( (MAJOR_1, "글로벌지역학"), (MAJOR_2, "EU전공"), (MAJOR_3, "GlobalBusiness"), (MAJOR_4, "TESOL영어학전공"), (MAJOR_5, "광고PR브랜딩전공"), (MAJOR_6, "교육학"), (MAJOR_7, "국가리더전공"), (MAJOR_8, "국제금융학과"), (MAJOR_9, "국제스포츠레저전공"), (MAJOR_10, "그리스불가리아학과"), (MAJOR_11, "남아프리카어전공"), (MAJOR_12, "독일어통번역학과"), (MAJOR_13, "동아프리카어전공"), (MAJOR_14, "동유럽학대학"), (MAJOR_15, "러시아학과"), (MAJOR_16, "루마니아어과"), (MAJOR_17, "말레이인도네시아어통번역학과"), (MAJOR_18, "문화콘텐츠학전공"), (MAJOR_19, "바이오메디컬공학전공"), (MAJOR_20, "방송영상뉴미디어전공"), (MAJOR_21, "브라질학과"), (MAJOR_22, "사학과"), (MAJOR_23, "산업경영공학과"), (MAJOR_24, "생명공학과"), (MAJOR_25, "서아프리카어전공"), (MAJOR_26, "세계문화예술경영전공"), (MAJOR_27, "세르비아크로아티아어과"), (MAJOR_28, "수학과"), (MAJOR_29, "스페인어통번역학과"), (MAJOR_30, "아랍어통번역학과"), (MAJOR_31, "아프리카학부"), (MAJOR_32, "언론정보전공"), (MAJOR_33, "언어인지과학과"), (MAJOR_34, "영미권통상통번역전공"), (MAJOR_35, "영미문학번역전공"), (MAJOR_36, "영어통번역학부"), (MAJOR_37, "영어통번역학전공"), (MAJOR_38, "우크라이나어과"), (MAJOR_39, "융복합소프트웨어전공"), (MAJOR_40, "이탈리아어통번역학과"), (MAJOR_41, "인도학과"), (MAJOR_42, "일본어통번역학과"), (MAJOR_43, "전자공학과"), (MAJOR_44, "전자물리학과"), (MAJOR_45, "정보기록학전공"), (MAJOR_46, "정보통신공학과"), (MAJOR_47, "정치외교학과"), (MAJOR_48, "중국어통번역학과"), (MAJOR_49, "중앙아시아학과"), (MAJOR_50, "지식콘텐츠전공"), (MAJOR_51, "철학과"), (MAJOR_52, "체코슬로바키아어과"), (MAJOR_53, "컴퓨터전자시스템공학전공"), (MAJOR_54, "태국어통번역학과"), (MAJOR_55, "통계학과"), (MAJOR_56, "폴란드어과"), (MAJOR_57, "프랑스학과"), (MAJOR_58, "한국학과"), (MAJOR_59, "행정학과"), (MAJOR_60, "헝가리어과"), (MAJOR_61, "화학과"), (MAJOR_62, "환경학과"), ) LOGIN_EMAIL = "email" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "EMAIL"), (LOGIN_KAKAO, "KAKAO"), ) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(default="") major = models.CharField(choices=MAJOR_CHOICES, max_length=20, blank=True) login_method = models.CharField(choices=LOGIN_CHOICES, max_length=50, default=LOGIN_EMAIL) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk})
class User(AbstractUser): """ Custom User Model""" GENDER_MALE = 'male' GENDER_FEMALE = 'female' GENDER_OTHER = 'other' GENDER_CHOICES = ((GENDER_MALE, 'male'), (GENDER_FEMALE, 'female'), (GENDER_OTHER, 'other')) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN, "Korean")) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = 'email' LOGIN_GH = 'github' LOGIN_KAKAO = 'kakao' LOGIN_CHOICES = ((LOGIN_EMAIL, 'Email'), (LOGIN_GH, 'Github'), (LOGIN_KAKAO, 'kakao')) avatar = models.ImageField(upload_to='avatars', blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN) currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, blank=True, default=CURRENCY_KRW) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=120, default='', blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse('users:profile', kwargs={'pk': self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string('email/verify_email.html', {'secret': secret}) send_mail( 'Verify Airbnb Account', strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return None
class User(AbstractUser): """ Custom User Moodel """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(blank=True) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=120, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) att_field = models.ManyToManyField("AttentionField", related_name="users", blank=True) att_language = models.ManyToManyField("AttentionLanguage", related_name="users", blank=True) followings = models.ManyToManyField("users.User", related_name="users", blank=True) like_boards = models.ManyToManyField("boards.Board", related_name="users", blank=True) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( "Verify Employment Information Account", strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): GENDER_MALE = 'male' GENDER_FEMALE = 'female' GENDER_OTHER = 'other' GENDER_CHOICES = ((GENDER_MALE, 'Male'), (GENDER_FEMALE, 'Female'), (GENDER_OTHER, 'Other')) LANGUAGE_ENGLISH = 'en' LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, 'English'), ) AMERICAN_DOLLARS = 'usd' INDIAN_RUPEES = 'inr' CURRENCY_CHOICES = ((AMERICAN_DOLLARS, 'USD'), (INDIAN_RUPEES, 'INR')) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_CHOICES = ((LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github")) bio = models.TextField(default="", blank=True) avatar = models.ImageField(blank=True, upload_to='avatars') gender = models.CharField(max_length=10, choices=GENDER_CHOICES, blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, default=LANGUAGE_ENGLISH, blank=True) currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, default=AMERICAN_DOLLARS, blank=True) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( _("Verify Airbnb Account"), strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=True, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, "en"), (LANGUAGE_KOREAN, "kr")) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField(blank=True, upload_to="avatar") avatar_thumbnail = ImageSpecField( source="avatar", processors=[ResizeToFill(200, 200)], format="JPEG", options={"quality": 60}, ) gender = models.CharField(max_length=10, blank=True, choices=GENDER_CHOICES) bio = models.TextField(blank=True) birthdate = models.DateField(null=True, blank=True) language = models.CharField( max_length=2, choices=LANGUAGE_CHOICES, blank=True, default=LANGUAGE_KOREAN ) currency = models.CharField( max_length=3, choices=CURRENCY_CHOICES, blank=True, default=CURRENCY_KRW ) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=False) login_method = models.CharField( max_length=6, choices=LOGIN_CHOICES, default=LOGIN_EMAIL ) objects = core_managers.CustomUserManager() def verify_email(self): secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( "Verify Airbnb-clone Account", strip_tags(html_message), from_email=settings.EMAIL_FROM, recipient_list=[self.email], fail_silently=False, html_message=html_message, ) self.save() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk})
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, _("남자")), (GENDER_FEMALE, _("여자")), (GENDER_OTHER, _("그 외")), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, _("영어")), (LANGUAGE_KOREAN, _("한국어"))) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_NAVER = "naver" LOGIN_CHOICES = ( (LOGIN_EMAIL, _("이메일")), (LOGIN_GITHUB, _("깃허브")), (LOGIN_KAKAO, _("카카오")), (LOGIN_NAVER, _("네이버")), ) avatar = models.ImageField(_("프로필 사진"), upload_to="avatars", blank=True) gender = models.CharField( _("성별"), choices=GENDER_CHOICES, max_length=10, blank=True ) bio = models.TextField(_("자기소개"), max_length=200, blank=True) birthdate = models.DateField(_("생일"), blank=True, null=True) language = models.CharField( _("언어"), choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN, ) currency = models.CharField( _("통화"), choices=CURRENCY_CHOICES, max_length=3, blank=True, default=CURRENCY_KRW, ) superhost = models.BooleanField(_("슈퍼호스트"), default=False) email_verified = models.BooleanField(_("이메일 인증"), default=False) email_secret = models.CharField(_("보안 코드"), max_length=20, default="", blank=True) login_method = models.CharField( _("로그인 방법"), max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL ) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string( "emails/verify_email.html", {"secret": secret} ) send_mail( _("계정 인증"), strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "male"), (GENDER_FEMALE, "female"), (GENDER_OTHER, "other"), ) LANGUAGE_ENGRLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ((LANGUAGE_ENGRLISH, "English"), (LANGUAGE_KOREAN, "Korean")) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField( upload_to="avatars", # /uploads 폴더 안데 avatars 폴더에다가 사진을 넣을것임. blank=True, ) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField( default="", blank=True ) # default를 넣는 이유는 데이터베이스 column에 빈칸이 없도록.. birthdate = models.DateField(blank=True, null=True) language = models.CharField( choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN ) currency = models.CharField( choices=CURENCY_CHOICES, max_length=3, blank=True, default=CURRENCY_KRW ) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField( max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL ) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] # import 추가 self.email_secret = secret html_message = render_to_string( "emails/verify_email.html", {"secret": secret} ) send_mail( # import 추가 "Verify Airbnb Account", strip_tags(html_message), # html을 html 형태를 제외한 상태로 보내주는거임. settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() # 하고 나서 user를 save해야한다. return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, _("Male")), (GENDER_FEMALE, _("Female")), (GENDER_OTHER, _("Other")), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ( (LANGUAGE_ENGLISH, _("English")), (LANGUAGE_KOREAN, _("Korean")), ) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(_("gender"), choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(_("bio"), blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField( _("language"), choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN, ) currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, blank=True, default=CURRENCY_KRW) superhost = models.BooleanField(default=False) email_confirmed = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomUserManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_confirmed is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( _("Verify Airbnb Account"), strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User Model 기본으로 제공하는 장고 USER를 커스텀하여 유저 모델 생성 """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_ATHOR = "athor" GENDER_CHOICES = [ (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_ATHOR, "Athor"), ] LOGIN_EMAIL = "email" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = [ (LOGIN_EMAIL, "Email"), (LOGIN_KAKAO, "Kakao"), ] avatar = models.ImageField(upload_to="avatars", null=True, blank=True) gender = models.CharField( choices=GENDER_CHOICES, max_length=10, blank=False, null=False, default=GENDER_MALE, ) login_method = models.CharField( max_length=10, choices=LOGIN_CHOICES, default=LOGIN_EMAIL, blank=False, null=False, ) rating = models.IntegerField(default=10) objects = core_managers.CustomUserManager() hint_question = models.IntegerField(blank=False, default=1) hint = models.CharField(blank=False, max_length=200, default="") def __str__(self): return self.first_name def delete(self, *args, **kargs): if self.avatar: os.remove(os.path.join(settings.MEDIA_ROOT, self.file.path)) super(User, self).delete(*args, **kargs) def get_rating(self): """ 사용자가 받은 피드백 점수를 합산하여 사용자 정보를 계산한다. """ rating = 0 feedback_count = 0 plans = plan_model.Plan.objects.filter(user=self.pk) for plan in plans: feedbacks = plan_model.Feedback.objects.filter(plan=plan) for feedback in feedbacks: rating += feedback.rating feedback_count += feedbacks.count() if feedback_count == 0: return 0 return round(rating / feedback_count, 1) def get_avatar(self): """ 업로드된 이미지가 있을 경우 이미지 출력 """ if self.avatar: return self.avatar.url else: None def get_first_nickname(self): return self.first_name[0]