class User(AbstractBaseUser, PermissionsMixin): email = EmailField(max_length=254, unique=True) is_staff = BooleanField(default=False) is_superuser = BooleanField(default=False) is_active = BooleanField(default=True) last_login = DateTimeField(null=True, blank=True) date_joined = DateTimeField(auto_now_add=True) USERNAME_FIELD = 'email' EMAIL_FIELD = 'email' REQUIRED_FIELDS = [] objects = UserManager() def get_absolute_url(self): return "/users/%i/" % (self.pk) def get_email(self): return self.email class Meta: db_table = 'auth_user'
class Person(AbstractUser): objects: UserManager = UserManager() name: TextField = TextField(null=False) familyName: TextField = TextField(null=False) cin: CharField = CharField(max_length=255, null=False, unique=True) email: EmailField = EmailField(null=False, unique=True) telephone: CharField = CharField(max_length=255, null=False, unique=True) password: TextField = TextField(null=False) typeUser: TextField = TextField(null=False, choices=[('teacher', 'Teacher'), ('instructor', 'Inscructor')], db_column='type_user') accountId: TextField = TextField(unique=True, null=True, db_column='account_id') localisation = ForeignKey(Localisation, on_delete=PROTECT, db_column='localisation', null=True) class Meta: db_table = 'persons'
class User(AbstractBaseUser, PermissionsMixin): email = EmailField(_('email address'), unique=True, blank=True) is_staff = BooleanField( _('staff status'), default=False, help_text=_( 'Designates whether the user can log into this admin site.'), ) is_active = BooleanField( _('active'), default=True, help_text=_( 'Designates whether this user should be treated as active. ' 'Unselect this instead of deleting accounts.' ), ) date_joined = DateTimeField(_('date joined'), default=timezone.now) objects = UserManager() EMAIL_FIELD = 'email' USERNAME_FIELD = 'email' def clean(self): super().clean() self.email = self.__class__.objects.normalize_email(self.email) def get_full_name(self): return self.email def get_short_name(self): return self.email def email_user(self, subject, message, from_email=None, **kwargs): send_mail(subject, message, from_email, [self.email], **kwargs) def __str__(self): return self.email
class Author(Model): """ Model corresponding "author" entity Attributes ---------- name : string Full name of the author username : string Username of the author. Must be unique email : string Email of the author, not necessarily unique date : datetime Automatically adds the current datetime """ name = CharField(max_length=50) username = CharField(max_length=50, unique=True) email = EmailField(max_length=50) date = DateTimeField(auto_now_add=True)
class ReferenceRequest(models.Model): # Fields name = CharField(max_length=255) slug = AutoSlugField(populate_from='name', blank=True) created = DateTimeField(auto_now_add=True, editable=False) last_updated = DateTimeField(auto_now=True, editable=False) email = EmailField(max_length=255) # Relationship Fields references = ManyToManyField('resume.Reference', ) class Meta: ordering = ('-created', ) def __unicode__(self): return u'%s' % self.slug def get_absolute_url(self): return reverse('resume_referencerequest_detail', args=(self.slug, )) def get_update_url(self): return reverse('resume_referencerequest_update', args=(self.slug, ))
class User(Model): first_name = CharField(verbose_name="Ism", max_length=64, help_text="64 ta belgidan oshmasligi kerak") last_name = CharField(verbose_name="Familiya", max_length=64, help_text="64 ta belgidan oshmasligi kerak") email = EmailField() categories = ManyToManyField('Category', related_name="followers", verbose_name="Yoqtirgan bo'limlari", blank=True) @property def full_name(self): return f"{self.first_name} {self.last_name}" def __str__(self): return f"{self.first_name} {self.last_name}" class Meta: verbose_name = "Foydalanuvchi" verbose_name_plural = "Foydalanuvchilar"
class DCFAbstractUser(AbstractBaseUser, __implements__, IDCFModel[T]): class Meta: abstract = True _meta: Options[T] # type: ignore model_permissions = ManyToManyField(DCFPermission) groups = ManyToManyField(UserGroup) username = CharField(_("username"), max_length=64, blank=False, unique=True) email = EmailField(_("email address"), blank=True) EMAIL_FIELD = "email" USERNAME_FIELD = "username" @classmethod def get_anonymous(cls) -> T: raise NotImplementedError() def __repr__(self) -> str: return f"<{self.__class__.__name__}: {self.pk}>" def __str__(self) -> str: return f"<{self.__class__.__name__}: {self.pk}>"
class Podcast(Model): id = UUIDField(primary_key=True, default=uuid.uuid4) slug = SlugField(unique=True) title = CharField(max_length=255) description = TextField() author = CharField(max_length=255) owner_name = CharField(max_length=255) owner_email = EmailField(max_length=255) image = ForeignKey(Image, on_delete=SET_NULL, null=True) category = CharField( max_length=255, choices=CATEGORY_CHOICES, default=CATEGORY_CHOICES[0][0]) explicit = CharField( max_length=5, choices=EXPLICIT_CHOICES, default=EXPLICIT_CHOICES[0][0])
class Company(Model): name = CharField(max_length=60) logo = ImageBinaryField(default=None, null=True, blank=True, editable=True) email = EmailField(null=True, blank=True) website = CharField( max_length=100, null=True, blank=True, ) telephone = CharField(null=True, blank=True, max_length=127) registered_address = CharField( max_length=1000, null=True, blank=True, editable=True, ) employee_expectations = CharField( max_length=1000, null=True, blank=True, help_text= "Optional\nInclude the company\'s vision, it's expectations from employees at large and relevant info here", editable=True, ) sector = CharField(max_length=25, help_text="e.g., Public, Government, NGO, Startup") industry = CharField( max_length=255, help_text="Which industry(ies) does the organisation fall in?") remarks = CharField( max_length=255, null=True, blank=True, ) def get_absolute_url(self): return reverse("recruiters:company_detail", kwargs={"pk": self.pk})
class Dados(Model): cd_ua = PositiveIntegerField(blank=True, null=True) sigla_ua = CharField(max_length=100, blank=True, null=True) nome_ua = CharField(max_length=255, blank=True, null=True) titular = CharField(max_length=255, blank=True, null=True) cargo = CharField(max_length=255, blank=True, null=True) cd_ua_pai = PositiveIntegerField(blank=True, null=True) cd_ua_basica = PositiveIntegerField(blank=True, null=True) nome_ua_basica = CharField(max_length=255, blank=True, null=True) sigla_ua_basica = CharField(max_length=255, blank=True, null=True) nat_juridica = PositiveIntegerField(blank=True, null=True) ordem_ua_basica = PositiveIntegerField(blank=True, null=True) ordem_absoluta = PositiveIntegerField(blank=True, null=True) ordem_relativa = PositiveIntegerField(blank=True, null=True) tipo_logradouro = CharField(max_length=255, blank=True, null=True) nome_logradouro = CharField(max_length=500, blank=True, null=True) trechamento_cep = CharField(db_column='trechamento_CEP', max_length=500, blank=True, null=True) nome_logradouro_abreviado = CharField(max_length=500, blank=True, null=True) nro = PositiveIntegerField(blank=True, null=True) complemento = CharField(max_length=255, blank=True, null=True) bairro = CharField(max_length=255, blank=True, null=True) bairro_abreviado = CharField(max_length=255, blank=True, null=True) localidade = CharField(max_length=255, blank=True, null=True) cep = CharField(max_length=255, db_column='CEP', blank=True, null=True) telefones = CharField(max_length=1000, blank=True, null=True) emails = EmailField(max_length=1000, blank=True, null=True) horario_funcionamento = CharField(max_length=255, blank=True, null=True) msg = TextField(max_length=255, blank=True, null=True) data_criacao_registro = DateTimeField(blank=True, null=True) class Meta: db_table = 'Dados'
class ImportRecord(Model): ROLES = {r[1]: r[0] for r in USER_ROLES} row = IntegerField(null=False) action_username = CharField(max_length=32, null=False) task_id = CharField(max_length=40, null=True) username = CharField(max_length=32, null=False) role = IntegerField(choices=USER_ROLES, default=USER_ROLES[-1][0]) first_name = CharField(max_length=30, null=True) last_name = CharField(max_length=30, null=True) bill_group_name = CharField(max_length=20, null=False) email = EmailField(null=True) status = CharField(max_length=24, null=True) error_message = CharField(max_length=50, null=True) create_time = DateTimeField(auto_now_add=True) update_time = DateTimeField(auto_now=True) class Meta: unique_together = ( ("action_username", "row"), ("action_username", "username") ) @classmethod def get_role_value(cls, role): return cls.ROLES[role] def as_dict(self, **karg): data = model_to_dict( self, fields=karg.get('fields', []), exclude=karg.get('exclude', []) ) data.update(role=self.get_role_display()) return data
class UserProfile(AbstractBaseUser, PermissionsMixin): """Clase que representa a los Usuarios en el sistema""" class Types(TextChoices): CLIENT = "CLIENT", "Client" MANAGER = "MANAGER", "Manager" COURIER = "COURIER", "Courier" email = EmailField(max_length=45, unique=True) type = CharField(max_length=7, choices=Types.choices, null=True, blank=True, help_text='tipo de usuario') is_active = BooleanField(default=True, help_text='usuario activo') is_staff = BooleanField(default=False, help_text='personal de administrador de Django') objects = UserProfileManager() USERNAME_FIELD = 'email' # Relaciones enterprise = ForeignKey('enterprises.Enterprise', related_name='couriers', on_delete=CASCADE, null=True, blank=True, help_text='establecimiento') def __str__(self) -> str: """ Función que representa al objeto cuando es recuperado """ return self.email
class Target(Model): """ People who'll be targeted :param email(EmailField): Target's email :param group(ForeignKey): Link to :func:`target group class <phishing.models.target.TargetGroup>` :param first_name(CharField): (Optional) First name of the target :param last_name(CharField): (Optional) Last name of the target """ email = EmailField() group = ForeignKey('TargetGroup', on_delete=CASCADE, related_name='targets') # optional infos first_name = CharField(max_length=128, blank=True) last_name = CharField(max_length=128, blank=True) def __str__(self): """ Print function for Target :return text: Print the email of the target """ return self.email
class Podcast(Model): id = UUIDField(primary_key=True, default=uuid.uuid4) slug = SlugField(unique=True) title = CharField(max_length=255) description = TextField() author = CharField(max_length=255) owner_name = CharField(max_length=255) owner_email = EmailField(max_length=255) image = ForeignKey(Image, null=True) CATEGORY_CHOICES = ( ('Arts', 'Arts'), ('Business', 'Business'), ('Comedy', 'Comedy'), ('Education', 'Education'), ('Games & Hobbies', 'Games & Hobbies'), ('Government & Organizations', 'Government & Organizations'), ('Health', 'Health'), ('Kids & Family', 'Kids & Family'), ('Music', 'Music'), ('News & Politics', 'News & Politics'), ('Religion & Spirituality', 'Religion & Spirituality'), ('Science & Medicine', 'Science & Medicine'), ('Society & Culture', 'Society & Culture'), ('Sports & Recreation', 'Sports & Recreation'), ('Technology', 'Technology'), ('TV & Film', 'TV & Film'), ) category = CharField(max_length=255, choices=CATEGORY_CHOICES, default='News & Politics')
class Candidato(Model): SEXO = ( (1, 'Feminino'), (2, 'Masculino'), ) ACRE = 'AC' ALAGOAS = 'AL' AMAPA = 'AP' AMAZONAS = 'AM' BAHIA = 'BA' CEARÁ = 'CE' DISTRITOFEDERAL = 'DF' ESPIRITOSANTO = 'ES' GOIAS = 'GO' MARANHAO = 'MA' MATOGROSSO = 'MT' MATOGROSSOSUL = 'MS' MINASGERAIS = 'MG' PARA = 'PA' PARAIBA = 'PB' PARANA = 'PR' PERNAMBUCO = 'PE' PIAUI = 'PI' RIODEJANEIRO = 'RJ' RIOGRANDEDONORTE = 'RN' RIOGRANDEDOSUL = 'RS' RONDONIA = 'RO' RORAIMA = 'RR' SANTACATARINA = 'SC' SAOPAULO = 'SP' SERGIPE = 'SE' TOCANTINS = 'TO' ESTADO = ( (ACRE, 'Acre'), (ALAGOAS, 'Alagoas'), (AMAPA, 'Amapá'), (AMAZONAS, 'Amazonas'), (BAHIA, 'Bahia'), (CEARÁ, 'Ceará'), (DISTRITOFEDERAL, 'Distrito Federal'), (ESPIRITOSANTO, 'Espirito Santo'), (GOIAS, 'Goiás'), (MARANHAO, 'Maranhão'), (MATOGROSSO, 'Mato Grosso'), (MATOGROSSOSUL, 'Mato Grosso do Sul'), (MINASGERAIS, 'Minas Gerais'), (PARA, 'Pará'), (PARAIBA, 'Paraíba'), (PARANA, 'Paraná'), (PERNAMBUCO, 'Pernambuco'), (PIAUI, 'Piauí'), (RIODEJANEIRO, 'Rio de Janeiro'), (RIOGRANDEDONORTE, 'Rio Grande do Norte'), (RIOGRANDEDOSUL, 'Rio Grande do Sul'), (RONDONIA, 'Rondônia'), (RORAIMA, 'Roraima'), (SANTACATARINA, 'Santa Catarina'), (SAOPAULO, 'São Paulo'), (SERGIPE, 'Sergipe'), (TOCANTINS, 'Tocantins'), ) cpf = CharField('CPF', max_length=150, unique=True) nome_civil = CharField('Nome Civil', max_length=150) nome_social = CharField('Nome Social', max_length=150) nome_apresentacao = CharField('Nome de Apresentação', max_length=150) nome_usual = CharField('Nome Usual', max_length=150) data_nascimento = DateField('Data de Nascimento') nome_mae = CharField('Nome da Mãe', max_length=150) nome_pai = CharField('Nome do Pai', max_length=150) sexo = PositiveIntegerField('Sexo', choices=SEXO) rg = CharField('RG', max_length=50) data_emissao = DateField('Data de emissão') estado_emissao = CharField('Estado Emissão', max_length=2, choices=ESTADO, default=RIOGRANDEDONORTE) orgao_rg = CharField('Órgão do RG', max_length=100) telefone = CharField('Telefone', max_length=150) email = EmailField('E-mail', unique=True) pais_nascimento = CharField('País de Nascimento', max_length=100) estado_nascimento = CharField('Estado de Nascimento', max_length=2, choices=ESTADO, default=RIOGRANDEDONORTE) cidade_nascimento = CharField('Município de Nascimento', max_length=150) cep = CharField('CEP', max_length=50) endereco = CharField('Endereço', max_length=200) complemento = CharField('Complento', max_length=100, null=True) uf = CharField('UF', max_length=100) cidade = CharField('Cidade', max_length=100) class Meta: verbose_name = "Inscrição" verbose_name_plural = "Inscrições" def __str__(self): return self.cpf
class About(Model): text_about = TextField(null=True) text_alamat = CharField(max_length=100, null=True) text_no_hp = CharField(max_length=40, null=True) text_email = EmailField(max_length=50, null=True)
class PCCandidato(Model): nome = CharField(max_length=100) email = EmailField() def __str__(self): return f'{self.nome} - {self.email}'
class User(AbstractBaseUser, BaseModel, LocationModel): email = EmailField(max_length=255, unique=True) is_active = BooleanField(default=True) is_staff = BooleanField(default=False) display_name = CharField(max_length=settings.NAME_MAX_LENGTH) description = TextField(blank=True) activation_key = CharField(max_length=40, blank=True) key_expires_at = DateTimeField(null=True) mail_verified = BooleanField(default=False) objects = UserManager() USERNAME_FIELD = 'email' def get_full_name(self): return self.display_name def get_short_name(self): return self.display_name def verify_mail(self): self.mail_verified = True self.activation_key = '' self.key_expires_at = None self.save() def _unverify_mail(self): key = crypto.get_random_string(length=40) self.mail_verified = False self.activation_key = key self.key_expires_at = timezone.now() + timedelta(days=7) self.save() def send_verification_code(self): self._unverify_mail() url = '{hostname}/#!/verify-mail?key={key}'.format( hostname=settings.HOSTNAME, key=self.activation_key) AnymailMessage( subject=_('Verify your mail address'), body=_( 'Here is your activation link: {}. It will be valid for 7 days.' ).format(url), to=[self.email], from_email=settings.DEFAULT_FROM_EMAIL, track_clicks=False, track_opens=False).send() def reset_password(self): new_password = User.objects.make_random_password(length=20) self.set_password(new_password) self.save() AnymailMessage( subject=_('New password'), body=_('Here is your new temporary password: {}.' + 'You can use it to login. Please change it soon.').format( new_password), to=[self.email], from_email=settings.DEFAULT_FROM_EMAIL, track_clicks=False, track_opens=False).send()
class UmToken(Model): key = CharField(max_length=32) email = EmailField(max_length=50, null=True) created_at = DateTimeField(auto_now_add=True)
class User(Model): name = CharField(max_length=32) google_id = CharField(max_length=32) mail = EmailField() created_at = DateTimeField(auto_now_add=True) updated_at = DateTimeField(auto_now=True)
class User(AbstractBaseUser, BaseModel, LocationModel): email = EmailField(unique=True, null=True) is_active = BooleanField(default=True) is_staff = BooleanField(default=False) is_superuser = BooleanField(default=False) display_name = CharField(max_length=settings.NAME_MAX_LENGTH) description = TextField(blank=True) language = CharField(max_length=7, default='en') activation_key = CharField(max_length=40, blank=True) key_expires_at = DateTimeField(null=True) mail_verified = BooleanField(default=False) unverified_email = EmailField(null=True) deleted = BooleanField(default=False) deleted_at = DateTimeField(default=None, null=True) current_group = ForeignKey('groups.Group', blank=True, null=True, on_delete=models.SET_NULL) photo = VersatileImageField( 'Photo', upload_to='user__photos', null=True, ) objects = UserManager() USERNAME_FIELD = 'email' def get_full_name(self): return self.display_name def get_short_name(self): return self.display_name def delete_photo(self): # Deletes Image Renditions self.photo.delete_all_created_images() # Deletes Original Image self.photo.delete(save=False) @transaction.atomic def verify_mail(self): self.mail_verified = True self.activation_key = '' self.key_expires_at = None self.email = self.unverified_email self.save() def _unverify_mail(self): key = crypto.get_random_string(length=40) self.mail_verified = False self.activation_key = key self.key_expires_at = timezone.now() + timedelta(days=7) self.save() @transaction.atomic def update_email(self, unverified_email): self.unverified_email = unverified_email self._send_mail_change_notification() self.send_new_verification_code() def update_language(self, language): self.language = language def _send_mail_change_notification(self): context = { 'user': self, } AnymailMessage(subject=render_to_string( 'changemail_notice-subject.jinja').replace('\n', ''), body=render_to_string( 'changemail_notice-body-text.jinja', context), to=[self.email], from_email=settings.DEFAULT_FROM_EMAIL, track_clicks=False, track_opens=False).send() def _send_welcome_mail(self): self._unverify_mail() url = '{hostname}/#/verify-mail?key={key}'.format( hostname=settings.HOSTNAME, key=self.activation_key) context = { 'user': self, 'url': url, } AnymailMessage( subject=render_to_string('mailverification-subject.jinja').replace( '\n', ''), body=render_to_string('mailverification-body-text.jinja', context), to=[self.unverified_email], from_email=settings.DEFAULT_FROM_EMAIL, track_clicks=False, track_opens=False).send() @transaction.atomic def send_new_verification_code(self): self._unverify_mail() url = '{hostname}/#/verify-mail?key={key}'.format( hostname=settings.HOSTNAME, key=self.activation_key) context = { 'user': self, 'url': url, } AnymailMessage(subject=render_to_string( 'send_new_verification_code-subject.jinja').replace('\n', ''), body=render_to_string( 'send_new_verification_code-body-text.jinja', context), to=[self.unverified_email], from_email=settings.DEFAULT_FROM_EMAIL, track_clicks=False, track_opens=False).send() @transaction.atomic def reset_password(self): new_password = User.objects.make_random_password(length=20) self.set_password(new_password) self.save() AnymailMessage( subject=_('New password'), body=_('Here is your new temporary password: {}. ' + 'You can use it to login. Please change it soon.').format( new_password), to=[self.email], from_email=settings.DEFAULT_FROM_EMAIL, track_clicks=False, track_opens=False).send() def has_perm(self, perm, obj=None): # temporarily only allow access for admins return self.is_superuser def has_module_perms(self, app_label): # temporarily only allow access for admins return self.is_superuser
class UserProfile(guardian.mixins.GuardianUserMixin, PermissionsMixin, AbstractBaseUser): email = EmailField(_("email address"), unique=True) is_active = BooleanField(default=True) is_staff = BooleanField(default=False) first_name = CharField(_("first name"), max_length=254) last_name = CharField(_("last name"), max_length=254) date_of_birth = DateField(_("date of birth")) phone = CharField(_("phone number"), max_length=254, blank=True) calendar_token = CharField(_("calendar token"), max_length=254, default=secrets.token_urlsafe) USERNAME_FIELD = "email" REQUIRED_FIELDS = [ "first_name", "last_name", "date_of_birth", ] objects = UserProfileManager() class Meta: verbose_name = _("user profile") verbose_name_plural = _("user profiles") db_table = "userprofile" def get_full_name(self): return self.first_name + " " + self.last_name def __str__(self): return self.get_full_name() def get_short_name(self): return self.first_name @property def age(self): today, born = date.today(), self.date_of_birth return today.year - born.year - ((today.month, today.day) < (born.month, born.day)) @property def is_minor(self): return self.age < 18 def as_participant(self): from ephios.core.signup import LocalUserParticipant return LocalUserParticipant( first_name=self.first_name, last_name=self.last_name, qualifications=self.qualifications, date_of_birth=self.date_of_birth, email=self.email if self.is_active else None, user=self, ) @property def qualifications(self): return Qualification.objects.filter( pk__in=self.qualification_grants.filter( Q(expires__gt=timezone.now()) | Q(expires__isnull=True)).values_list( "qualification_id", flat=True)).annotate(expires=Max( F("grants__expires"), filter=Q(grants__user=self)), ) def get_shifts(self, with_participation_state_in): from ephios.core.models import Shift shift_ids = self.localparticipation_set.filter( state__in=with_participation_state_in).values_list("shift", flat=True) return Shift.objects.filter(pk__in=shift_ids).select_related("event") def get_workhour_items(self): from ephios.core.models import AbstractParticipation participation = ( self.localparticipation_set.filter( state=AbstractParticipation.States.CONFIRMED).annotate( hours=ExpressionWrapper( (F("shift__end_time") - F("shift__start_time") ) # calculate length of shift in μs / 1000000 # convert microseconds to seconds / 3600, # convert seconds to hours output_field=models.DecimalField(), ), date=ExpressionWrapper(TruncDate(F("shift__start_time")), output_field=DateField()), reason=F("shift__event__title"), ).values("hours", "date", "reason")) workinghours = self.workinghours_set.all().values( "hours", "date", "reason") hour_sum = (participation.aggregate(Sum("hours"))["hours__sum"] or 0) + (workinghours.aggregate(Sum("hours"))["hours__sum"] or 0) return hour_sum, list( sorted(chain(participation, workinghours), key=lambda k: k["date"]))
class Customer(Model): id = UUIDField(primary_key=True) name = CharField(max_length=45) surname = CharField(max_length=45) phone = CharField(max_length=45) email = EmailField()
def test_get_schematic_type(self): self.assertEqual(get_schematics_type(type(EmailField())), EmailType)
def annotate_email(self): return self.annotate(email=Concat( "user_part", Value("@"), "domain_part", output_field=EmailField()))
def test_get_type(self): self.assertEqual(get_type(EmailField()), EmailField)
class Zmail(BaseModel): from_addr = EmailField() to_addr = EmailField()
class Case(Model): """案件 * state: 案件狀態, 預設值為未成案 * uuid: 案件編號(uuid4) * type: 案件類別 * region: 使用者所在選區 * title: 標題 * content: 案件內容 * location: 相關地址 * username: 使用者名字 * mobile: 手機 * email: 信箱 * address: 地址 * open_time: 成案日期 * close_time: 結案日期 * update_time: 上次更新時間 """ state = FSMField(default=State.DRAFT, verbose_name=_('Case State'), choices=State.CHOICES) uuid = UUIDField(default=uuid.uuid4, verbose_name=_('UUID'), unique=True) number = CharField(max_length=6, default='-', null=True, blank=True, verbose_name=_('Case Number')) type = ForeignKey('cases.Type', on_delete=CASCADE, related_name='cases', verbose_name=_('Case Type')) region = ForeignKey('cases.Region', on_delete=CASCADE, related_name='cases', verbose_name=_('User Region')) title = CharField(max_length=255, verbose_name=_('Case Title')) content = TextField(verbose_name=_('Content')) location = CharField(null=True, blank=True, max_length=255, verbose_name=_('Location')) username = CharField(max_length=50, verbose_name=_('Username')) mobile = CharField(max_length=10, null=True, blank=True, verbose_name=_('Mobile')) email = EmailField(null=True, blank=True, verbose_name=_('Email')) address = CharField(null=True, blank=True, max_length=255, verbose_name=_('Address')) open_time = DateTimeField(null=True, blank=True, verbose_name=_('Opened Time')) close_time = DateTimeField(null=True, blank=True, verbose_name=_('Closed Time')) create_time = DateTimeField(auto_now_add=True, null=True, blank=True, verbose_name=_('Created Time')) update_time = DateTimeField(auto_now=True, null=True, blank=True, verbose_name=_('Updated Time')) disapprove_info = TextField(null=True, blank=True, verbose_name=_('Disapprove Info')) note = TextField(null=True, blank=True, verbose_name=_('Case Notes')) tags = TagField(blank=True, verbose_name=_('Tags'), verbose_name_plural=_('Tags')) objects = CaseQuerySet.as_manager() class Meta: verbose_name = _('Case') verbose_name_plural = _('Cases') ordering = ('id', ) def save(self, *args, **kwargs): created = self.pk is None super(Case, self).save(*args, **kwargs) if created: self.number = str(self.pk).zfill(6) self.save() self.move_file() # 搬移暫存檔案 self.confirm(template_name='收件通知') # 發送確認信 new_case_notify(self) # 發送slack通知 def __str__(self): return self.number def to_dict(self): """用於新增CaseHistory""" return { 'state': self.state, 'title': self.title, 'type': self.type, 'region': self.region, 'content': self.content, 'location': self.location, 'username': self.username, 'mobile': self.mobile, 'email': self.email, 'address': self.address, } def move_file(self): case = Case.objects.get(uuid=self.uuid) objs = TempFile.objects.filter(case_uuid=self.uuid) for i in objs: file = TEMP_STORAGE.open(i.file.name) case_file = CaseFile() case_file.case = case case_file.file = file case_file.save()
class UserDetailForm(Form): password = CharField(max_length=64, blank=True) email = EmailField(blank=True)
def test_EmailField(self): lazy_func = lazy(lambda: "*****@*****.**", str) self.assertIsInstance(EmailField().get_prep_value(lazy_func()), str)