class Empleado(models.Model): empleado = models.OneToOneField( 'users.User', verbose_name=('Usuario'), related_name='empleado', ) nombre = models.CharField(verbose_name=_('Nombre'), max_length=100) apellidos = models.CharField(verbose_name=_('Apellido'), max_length=100) cedula = models.CharField( verbose_name=_('cedula'), max_length=20, unique=True, ) celular = models.CharField(verbose_name=_('Celular'), max_length=20) tipo = models.CharField(verbose_name=_('Tipo'), max_length=20, choices=tipo_choice, default=VENDEDOR) habilitado = models.BooleanField(verbose_name=_('Habilitado'), default=True) imagen = models.ImageField(verbose_name=_('Imagen'), null=True, blank=True, upload_to="imagenes/empleado") thumbnail = ImageSpecField(source='imagen', processors=[ResizeToFill(100, 50)], format='JPEG', options={'quality': 60}) class Meta: ordering = ['cedula'] verbose_name_plural = "Empleados" def __str__(self): return '%s - %s' % (self.empleado.first_name, self.tipo)
class User(AbstractUser): AVATAR_MAX_SIZE = 2 * 1024 * 1024 AVATAR_ALLOWED_EXTENSIONS = ["png", "jpg", "jpeg"] AVATAR_DEFAULT_FILENAME = "default.jpeg" nickname = models.CharField(_("nickname"), max_length=30, blank=True) avatar = models.ImageField( _("avatar"), upload_to=user_avatar_path, validators=[ FileValidator(max_size=AVATAR_MAX_SIZE, allowed_extensions=AVATAR_ALLOWED_EXTENSIONS) ], blank=True, ) avatar_thumbnail = ImageSpecField( source="avatar", processors=[ResizeToFill(70, 70)], format="jpeg", options={"quality": 100}, ) class Meta(AbstractUser.Meta): pass class JSONAPIMeta: resource_name = "users" def save(self, *args, **kwargs): if not self.pk: if not self.nickname: self.nickname = self.username if not self.avatar: self.set_default_avatar() super(User, self).save(*args, **kwargs) def set_default_avatar(self): avatar_byte_array = AvatarGenerator.generate(self.username) self.avatar.save( self.AVATAR_DEFAULT_FILENAME, ContentFile(avatar_byte_array), save=False, )
class Post(models.Model): title = models.CharField(max_length=200) content = HTMLField(null=True) member_content = HTMLField(null=True, blank=True) author = models.ForeignKey(ZappyUser, on_delete=models.CASCADE, null=True, blank=True) preview_image = ProcessedImageField( blank=True, upload_to='images/tutorials/', ) thumbnail = ImageSpecField(source='preview_image', processors=[ResizeToFill(250, 200)], format='JPEG', options={'quality': 100}) published = models.DateTimeField(default=timezone.now) created = models.DateTimeField(auto_now_add=True, null=True) updated = models.DateTimeField(auto_now=True) status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='D') objects = PostsManager() class Meta: ordering = ('-published', ) def __str__(self): return self.title def get_absolute_url(self): return reverse('posts:view_post', kwargs={ 'post_pk': self.id, 'post_slug': slugify(self.title) }) def get_read_time(self): ''' Returns the read time of the Content body ''' string = str(self.content) result = readtime.of_html(string) return result
class AudioVisual(models.Model): title = models.CharField(max_length=100) date = models.DateTimeField(auto_now_add=True) video_file = models.FileField(upload_to='videos/', null=True, verbose_name="Upload Video", blank=True) thumbnail_image = models.ImageField(upload_to="pic_folder/", null=True, blank=True, help_text="Video Thumbnail Image") image_thumbnail = ImageSpecField(source='thumbnail_image', processors=[ResizeToFill(100, 85)], format='JPEG', options={'quality': 60}) path = models.TextField(help_text="Embed Link for youtube or any link", blank=True, null=True) author = models.CharField(max_length=250, help_text="Content Owner", blank=True, null=True) created_by = models.ForeignKey(User, blank=True, null=True, related_name="videouser_manager") category = models.CharField(max_length=100, choices=AUDIOVISUALCHOICES) published = models.BooleanField(default=False) sub_category = models.ForeignKey(VideoCategory, null=True, help_text='Type of Video') payment_status = models.CharField(max_length=100, choices=PAYMENTSTATUS, default="free", help_text="Payment Required", verbose_name='Payment Required?') description = fields.HTMLField(default="") def __str__(self): return self.title class Meta: verbose_name = 'Video Content Manager' verbose_name_plural = 'Video Content Manager'
class Post(core_models.TimeStampedModel): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) photo = ProcessedImageField(upload_to=photo_path, processors=[ResizeToFill(600, 600)], format='JPEG', options={'quality': 90},) content = models.CharField(max_length=140, help_text="최대 140자 입력 가능") tag_set = models.ManyToManyField('Tag', blank=True ) like_user_set = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='like_user_set', through='Like') # post.like_set 으로 접근 가능, through : like_iser_set은 like를통해 생긴다. bookmark_user_set = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='bookmark_user_set', through='Bookmark') # post.bookmark_set 으로 접근 가능 class Meta: ordering = ['-created_at'] # content에서 tags를 추출하여, Tag 객체 가져오기, 신규 태그는 Tag instance 생성, 본인의 tag_set에 등록, def tag_save(self): tags = re.findall(r'#(\w+)\b', self.content) #re.정규표현식(매칭되는 모든것을 찾음) if not tags: return for t in tags: tag, tag_created = Tag.objects.get_or_create(name=t) self.tag_set.add(tag) # ManyToManyField 에 인스턴스 추가 #get set에서 get의 역할 @property def like_count(self): return self.like_user_set.count() @property def bookmark_count(self): return self.bookmark_user_set.count() def __str__(self): return self.content
class Complaint(models.Model): Title = models.CharField(verbose_name='عنوان', max_length=100) Description = models.TextField(verbose_name='توضیحات') MobileNumber = models.CharField(verbose_name='شماره موبایل', max_length=11, blank=True) Email = models.EmailField(verbose_name='ایمیل', blank=True) TYPE_STATUS = ( ('0', 'شکایت'), ('1', 'انتقادات و پیشنهادات'), ('2', 'تماس با مدیریت'), ) Type = models.CharField(verbose_name='نوع', max_length=1, choices=TYPE_STATUS, default='0') Image = models.ImageField( verbose_name='عکس', upload_to=PathAndRename('media/Pictures/Complaint/'), blank=True, null=True) Image_medium = ImageSpecField(source='Image', processors=[ResizeToFill(450, 450)], format='JPEG', options={'quality': 60}) # Output Customization Based On User def __str__(self): return "{}".format(self.Title) def Image_thumbnail_url(self): try: i = self.Image_medium.url url = self.Image_medium.url return url except: url = "https://nakhll.com/media/Pictures/default.jpg" return url # Ordering With DateCreate class Meta: ordering = ('id', ) verbose_name = "شکایت" verbose_name_plural = "شکایت ها"
class tblGaleria(models.Model): def url(self, filename): if filename: ruta = "foto_galeria/%s/%s" % (self.proyecto.usuario.username, self.proyecto.nombre + ' - ' + str(filename)) return ruta foto = ProcessedImageField(upload_to=url, default='foto_default/Responsive_Device.png', processors=[ResizeToFill(90, 90)], format='JPEG', options={'quality': 60}) proyecto = models.ForeignKey(tblProyecto, blank=False, related_name='proyectos') def __unicode__(self): return self.proyecto.nombre
class Profile(models.Model): user = models.OneToOneField(AUTH_USER_MODEL, on_delete=models.CASCADE) # We use ImageKit to manipulate uploaded image picture = ProcessedImageField(upload_to='user_profile/', blank=True, processors=[ResizeToFill(128, 128)], format='JPEG', options={'quality': 100}, default='profile/user.svg') activity = models.CharField(max_length=30, blank=True, default='Non renseigné') location = models.CharField(max_length=30, blank=True, default='Non renseigné') created_at = models.DateField(auto_now_add=True) def __str__(self): return f'{self.user}\'s profile'
class RecipeImage(models.Model): """ Model of recipe image """ recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, verbose_name=_('recipe')) image = AjaxImageField(null=True, blank=True, upload_to='images', max_width=1024, max_height=768, crop=True, verbose_name=_('image')) thumbnail = ImageSpecField(source='image', processors=[ResizeToFill(400, 300)], format='JPEG', options={'quality': 90}) title = models.CharField(max_length=250, blank=True, verbose_name=_('title')) def __str__(self): return _('image') + '-' + str(self.id) class Meta: verbose_name = _('image') verbose_name_plural = _('images')
class Student(models.Model): # id = models.AutoField(primary_key = True) -> 자동으로 추가되기 때문에 따로 작성하지 않음 name = models.CharField(max_length=10) age = models.IntegerField() image = ProcessedImageField( blank=True, upload_to='students/images', # 업로드 위치 processors=[ResizeToFill(300, 300)], # 처리할 작업들 목록 format='jpeg', # 저장 포멧 - jpg, png 등 사용 가능 options={ 'quality': 90, # 옵션 }, ) # image = models.ImageField(blank=True) # blank=True -> 비어 있는 값(ex. '')이 들어올 수 있음. # null=True -> None(NULL)이 들어올 수 있음. created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
class ImagesOfPost(models.Model): name = models.CharField(max_length=6, default="image1") post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="img") image = models.ImageField(upload_to=user_directory_path_post, blank=True) image_thumbnail = ImageSpecField(source='image', processors=[ResizeToFill(300, 200)], format='JPEG', options={'quality': 80}) def __str__(self): string = " ".join([ self.post.thread.section.name_section, self.post.thread.name_thread, str(self.post.post_number), self.name ]) return string
class Slide(models.Model): title = models.CharField(max_length=150, blank=True) text = models.CharField(max_length=450, blank=True) link = models.CharField(max_length=350, blank=True) slide = models.ImageField(upload_to='slides') slide_thumbnail = ImageSpecField(source='slide', processors=[ResizeToFill(100, 50)], format='JPEG', options={'quality': 60}) class Meta: verbose_name = 'Slide' verbose_name_plural = 'Slide' def __str__(self): return self.title def __unicode__(self): return unicode(self.title)
class Recommendation(TimeStampedModel): pic = models.ImageField(_("picture"), upload_to="recommendation/", blank=True) pic_thumbnail = ImageSpecField( source="pic", processors=[ResizeToFill(100, 100)], format="JPEG", options={"quality": 80}, ) url = models.URLField(_("url"), blank=True) description = models.TextField(_("description")) class Meta: verbose_name = _("recommendation") verbose_name_plural = _("recommendations") def __str__(self): return self.description[:50]
class ReviewModel(models.Model): created_at = models.DateTimeField(auto_now_add=True, auto_now=False) title = models.CharField(max_length=100) content = models.TextField() image = models.ImageField(upload_to='review', default='package/no-image.png') image_thumbnail = ImageSpecField(source='image', processors=[ResizeToFill(439, 278)], format='JPEG', options={'quality': 60}) given_by = models.ForeignKey(User) given_for = models.ForeignKey(CompanyModel) likes = models.ManyToManyField(User, related_name='review_likes') def __str__(self): return self.title class Meta: ordering = ['-created_at']
class User(AbstractUser): nickname = models.CharField(max_length=32, unique=True, verbose_name='昵称') avatar = models.ImageField(upload_to=user_directory_path, blank=True, verbose_name='头像') avatar_thumbnail = ImageSpecField(source='avatar', processors=[ResizeToFill(128, 128)], format='JPEG', options={'quality': 100}) signature = models.CharField(max_length=100, null=True, blank=True, verbose_name='签名') joined_time = models.DateTimeField(auto_now_add=True, verbose_name='加入时间') joined_ip = models.GenericIPAddressField(null=True, blank=True) last_ip = models.GenericIPAddressField(null=True, blank=True, unpack_ipv4=True) follows = models.ManyToManyField('self', related_name='followed_by', symmetrical=False, blank=True) class Meta: verbose_name = "用户信息" verbose_name_plural = verbose_name def get_absolute_url(self): from django.urls import reverse return reverse('user:detail', args=(self.pk, )) def avatar_url(self): if not self.avatar_thumbnail: return '/media/image/default_avatar.jpg' return self.avatar_thumbnail.url def save(self, *args, **kwargs): if not self.nickname: self.nickname = self.username super().save(*args, **kwargs) def __str__(self): return self.username
class CategoryInIndex(models.Model): index = models.ForeignKey(Index, on_delete=models.CASCADE, verbose_name='Статические элементы', related_name='index_categories') category = models.ForeignKey('products.Category', on_delete=models.CASCADE, verbose_name='Категория', related_name='index_categories') image = models.ImageField(upload_to='index_products/', verbose_name='Изображение') image_small = ImageSpecField(source='image', processors=[ResizeToFill(526, 296)], format='JPEG', options={'quality': 90}) class Meta: verbose_name = 'Категория' verbose_name_plural = 'Категории'
class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() # image = models.ImageField(blank=True) image = ProcessedImageField( upload_to="posts/images", # 저장 위치 processors=[ResizeToFill(300, 300)], # 처리할 작업 목록 format="JPEG", # 저장 포맷 (확장자) options={'quality': 90}, # 저장 포맷 관련 옵션 ) # Crate될 때, 딱 한번 현재 시각 created_at = models.DateTimeField(auto_now_add=True) # 변경이 될 때 마다, 현재 시각 updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.title
class Products(models.Model): name = models.CharField(max_length=64, verbose_name="商品名称") product_img = ProcessedImageField( upload_to="products", null=True, processors=[ResizeToFill(800, 800)], format='JPEG', options={'quality': 75} ) product_type_choices = ((0, '纪念品'), (1, '书籍'), (2, '文化衫')) product_type = models.SmallIntegerField(choices=product_type_choices) price = models.DecimalField(decimal_places=2, max_digits=6, default=0) sale_num = models.PositiveIntegerField(verbose_name="销售额", default=0) store_num = models.PositiveIntegerField(verbose_name="库存量", default=0) post_date = models.DateField(verbose_name="发布日期", blank=True, null=True) status_choices = ((0, '预定中'), (1, '售卖中'), (2, '已售空')) status = models.SmallIntegerField(choices=status_choices) def __str__(self): return "{" + self.get_product_type_display() + "}" + self.name
class Service(models.Model): title = models.CharField(max_length=150, blank=True) statement = models.CharField(max_length=450, blank=True) description = RedactorField(verbose_name=u'Description') service = models.ImageField(upload_to='servces') service_thumbnail = ImageSpecField(source='service', processors=[ResizeToFill(100, 50)], format='JPEG', options={'quality': 60}) class Meta: verbose_name = 'Service' verbose_name_plural = 'Services' def __str__(self): return self.title def __unicode__(self): return unicode(self.title)
class Album(models.Model): thumb = ProcessedImageField(upload_to='thumb', processors=[ResizeToFill(320, 180)], format='JPEG', options={'quality': 80}, verbose_name=u'Превью') title = models.CharField(verbose_name='Название альбома', max_length=255) date_album = models.DateTimeField(verbose_name='Дата', auto_now_add=False, default=datetime.now) desc = RichTextField(verbose_name='Описание альбома', blank=True) def __unicode__(self): return self.title class Meta: verbose_name = "Альбом" verbose_name_plural = "Альбомы"
class SkillStack(models.Model): # 스택 이름 name = models.CharField(max_length=50, primary_key=True) # 스택 이미지 img = ProcessedImageField(upload_to='icon', processors=[ResizeToFill(500, 500)], format='JPEG', options={'quality': 60}, default="icon/dummy.png") # 스택 설명 detail = models.TextField(null=True) # 스택 쉐어 링크 stackshareLink = models.CharField(max_length=100, null=True) # 스택 공식 웹페이지 webpage = models.CharField(max_length=50, null=True) # 카테고리 - 에러나면 에러났다는 메세지 저장 category = models.CharField(max_length=50, null=True) # 생성일 created_at = models.DateTimeField(auto_now_add=True)
class Suser(models.Model): name = models.CharField(max_length=100) city = models.CharField(max_length=100, null=True) state = models.CharField(max_length=100, null=True) phone = models.IntegerField(null=True) email = models.EmailField(null=True) user = models.ForeignKey(User, on_delete=models.CASCADE) myimg = models.ImageField(upload_to="images\\", validators=[validate_img], null=True, blank=True, default='/images/images.png') myimg_thumbnail = ImageSpecField(source='myimg', processors=[ResizeToFill(150, 130)], format='JPEG', options={'quality': 60}) def __str__(self): return self.name
class PopularBrand(models.Model): name = models.CharField(max_length=255) avatar = models.ImageField(upload_to='images/products/brands') avatar_thumbnail = ImageSpecField(source='avatar', processors=[ResizeToFill(160, 65)], format='JPEG', options={'quality': 100}) slug = models.SlugField(blank=True) def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.name) return super(PopularBrand, self).save(*args, **kwargs) def get_absolute_url(self): return reverse("products:brand_detail", kwargs={"slug": self.slug}) def __str__(self): return self.name
class Aplication(models.Model): category = models.ForeignKey(Category, related_name='aplications', on_delete=models.CASCADE) name = models.CharField(max_length=255) slug = models.SlugField() isActive = models.BooleanField(blank=False, default=True) description = models.CharField(max_length=2550, blank=True) image = ImageField(upload_to='uploads/', blank=True, null=True) thumbnail = ImageSpecField(source='image', processors=[ResizeToFill(300, 200)], format='JPEG', options={'quality': 80}) class Meta: ordering = ('-name', ) def __str__(self): return self.name def get_image(self): if self.image: return 'http://127.0.0.1:8000' + self.image.url return '' def get_thumbnail(self): if self.thumbnail: return 'http://127.0.0.1:8000' + self.thumbnail.url else: if self.image: self.thumbnail = self.make_thumbnail(self.image) self.save() # return 'http://127.0.0.1:8000' logging.info(self.thumbnail.path) return 'http://127.0.0.1:8000' + self.thumbnail.url else: return 'http://127.0.0.1:8000' + settings.MEDIA_URL + "logo-prodasen.png/" def get_absolute_url(self): return f'/{self.category.slug}/{self.slug}/'
class Author(models.Model): name = models.CharField(max_length=100) img = models.ImageField(upload_to='images/author', blank=True) # Creating thumb image using imagekit img_thumb = ImageSpecField(source='img', processors=[ResizeToFill(250, 250)], format='JPEG', options={'quality': 60}) desc = models.TextField(blank=True) status = models.BooleanField(default=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) # change app name object to actual data name def __str__(self): return self.name class Meta: verbose_name_plural = "Author"
class AboutUs(models.Model): title = models.CharField(max_length=150, blank=True) subtitle = models.CharField(max_length=150, blank=True) body = models.CharField(max_length=1500, blank=True) avatar = models.ImageField(upload_to='avatars') avatar_thumbnail = ImageSpecField(source='avatar', processors=[ResizeToFill(100, 50)], format='JPEG', options={'quality': 60}) class Meta: verbose_name = 'About Us' verbose_name_plural = 'About Us' def __str__(self): return self.title def __unicode__(self): return unicode(self.title)
class Photo(models.Model): owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='photos') uploaded_at = models.DateTimeField(auto_now_add=True) public = models.BooleanField(default=True) favorited_by = models.ManyToManyField(User, related_name='favorite_photos', blank=True) photo = models.ImageField(upload_to='photo_photos/', null=True, blank=False) photo_thumbnail = ImageSpecField( source="photo", processors=[ResizeToFill(200, 200)], format="JPEG", options={"quality": 60}, ) albums = models.ManyToManyField(Album, related_name='photos', blank=True)
class Game(TimeStampedModel): class Meta(): verbose_name = "Jogo" verbose_name_plural ="Jogos" slug = AutoSlugField(populate_from='name', unique=True) name = models.CharField("Nome", max_length=100, unique=True) image = ProcessedImageField(upload_to="games/image/%Y/%m/%d", blank=True, null=True, processors=[ResizeToFill(80, 90)], format='JPEG',options={'quality': 60}) description = models.TextField("Descrição", blank=True) number_players = models.CharField("Nº de Jogadores", blank=True, max_length=10) tags = TaggableManager(verbose_name='Tags', blank=True) def __unicode__(self): return u'%s' % (self.name) def get_absolute_url(self): return reverse('games:game_detail', args=[self.slug])
class Media(AuditedModel): actor = models.CharField(max_length=36) item = models.CharField(max_length=36) image = models.ImageField(upload_to=upload_to, blank=True, null=True) avatar = ImageSpecField(source='image', processors=[ResizeToFill(100, 100)], format='PNG', options={'quality': 60}) thumbnail = ImageSpecField(source='image', processors=[ResizeToFit(256, 256)], format='PNG', options={'quality': 60}) # file = models.FileField(upload_to=upload_to, blank=True, null=True)
class Sotrudnik_dekanat(models.Model): name = models.CharField(max_length=150, verbose_name="Ф.И.О") place = models.TextField(default=' ', verbose_name="Должность") place_kg = models.TextField(default=' ', verbose_name="Должность KG") #image = models.ImageField(upload_to='static/', blank=True, null=True, verbose_name="ФОТО") image = ProcessedImageField(upload_to='static/', processors=[ResizeToFill(150, 210)], format='JPEG', options={'quality': 60}, blank=True, null=True, verbose_name="ФОТО") class Meta: verbose_name = "Сотрудник факультета" verbose_name_plural = "Сотрудники факультета" def __str__(self): return f" {self.name}"