class Item(models.Model): item_name = models.CharField(max_length=50, unique=True) category = TreeForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True, related_name='product_category') description = models.TextField() # image = models.ImageField(upload_to=upload_image_path, blank=True) # OptimizedImageField use for image optimization image = OptimizedImageField(upload_to=upload_image_path, optimized_image_output_size=(400, 300), optimized_image_resize_method='cover', blank=True) # 'thumbnail', 'cover' or None image_thumbnail = OptimizedImageField(upload_to=upload_image_path, optimized_image_output_size=(860, 440), optimized_image_resize_method='thumbnail', blank=True) brand = models.CharField(max_length=50) creator = models.ForeignKey(Vendor, related_name='product_creator', on_delete=models.CASCADE) is_active = models.BooleanField(default=True) timestamp = models.DateTimeField(auto_now_add=True) last_update = models.DateTimeField(auto_now=True) slug = models.SlugField(blank=True, null=True, unique=True, allow_unicode=True) objects = ItemManager() def __str__(self): return self.item_name @property def title(self): return self.item_name def get_absolute_product_attribute_create_url(self): return reverse("product-create", kwargs={"slug": self.slug}) def get_absolute_product_update_url(self): return reverse("item-update-url", kwargs={"slug": self.slug})
class Game(models.Model): id = models.AutoField(primary_key=True) name = models.CharField('Game name', max_length=512, default='', blank=True) description = models.TextField('Game description', default='', blank=True) release_date = models.DateField('Release date', null=True, blank=True) logo = OptimizedImageField('Game logo', upload_to=RandomFileName('uploads', 'logos'), null=True, blank=True) wallpaper = OptimizedImageField('Game wallpaper', upload_to=RandomFileName( 'uploads', 'wallpapers'), null=True, blank=True) score_list = models.ManyToManyField(Score, blank=True) platforms = models.ManyToManyField(Platform, blank=True) genres = models.ManyToManyField(Genre, blank=True) screenshots = models.ManyToManyField(Image, blank=True) average_score = models.FloatField('Average score', default=0, blank=True) count_score = models.IntegerField('Count score', default=0, blank=True) def calc_average_score(self): average = self.score_list.values('value').annotate( sum=Sum('value')).aggregate(average=Avg('sum'))['average'] return average if average is not None else 0 def save(self, *args, **kwargs): if self.id is not None: self.average_score = self.calc_average_score() self.count_score = self.score_list.count() if self.logo: self.logo = compress_image(self.logo) if self.wallpaper: self.wallpaper = compress_image(self.wallpaper) super(Game, self).save(*args, **kwargs) def __str__(self): return "%s" % self.name class Meta: verbose_name = 'game' verbose_name_plural = 'games' ordering = ['name']
class Post(models.Model): """ Post model. This model represents a Blog Post with a few fields including a `photo` field which is an OptimizedImageField instance without any optional argument. This means that out Post photo would keep source image original size. """ title = models.CharField( max_length=100 ) photo = OptimizedImageField( upload_to='uploads/posts/%Y/%m/%d' ) created = models.DateTimeField( auto_now_add=True ) def __str__(self): return self.title class Meta: ordering = ['-created']
class Post(models.Model): content = models.TextField() image = OptimizedImageField( upload_to='posts', optimized_image_resize_method='cover', optimized_image_output_size=(1080, 920), validators=[FileExtensionValidator(['png', 'jpg', 'jpeg'])], blank=True) liked = models.ManyToManyField(Profile, blank=True, related_name='likes') updated = models.DateTimeField(auto_now=True) created = models.DateTimeField(auto_now_add=True) author = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='posts') def __str__(self): return str(self.content[:20]) def num_likes(self): return self.liked.all().count() def num_comments(self): return self.comment_set.all().count() class Meta: ordering = ('-created', )
class Articles(TimeLog): title = models.CharField(max_length=255, unique=True) subtitle = models.CharField(max_length=255, default=' ', blank=True) cover = OptimizedImageField( upload_to="Articles", optimized_image_output_size=(400, 320), optimized_image_resize_method="cover", blank=True # 'thumbnail', 'cover' or None ) category = models.ForeignKey(Category, verbose_name=_("category_id"), on_delete=models.CASCADE) tags = ArrayField(models.CharField(max_length=250, blank=True), blank=True) content = models.TextField() author_name = models.CharField(max_length=240) user = models.CharField(max_length=250) realease = models.DateTimeField(auto_now_add=True) is_active = models.BooleanField(default=True) slug = models.SlugField(unique=True, default=" ", max_length=255) def save(self, *args, **kwargs): self.slug = slugify(self.title) super().save(*args, **kwargs) # @staticmethod @cached_property def get_total_articles(self): return Articles.objects.filter(is_active=True).count() class Meta: db_table = "articles" verbose_name = "Article" verbose_name_plural = "Articles" ordering = ('-updated_at', )
class pushNotifications(models.Model): title = models.CharField(max_length=25) body = models.CharField(max_length=50) Image = OptimizedImageField(default='avatar.jpg', optimized_image_output_size=(250, 250), optimized_image_resize_method='thumbnail', upload_to="images/")
class Student(models.Model): """Model That Represents The Student""" user = models.OneToOneField(User, on_delete=models.CASCADE, blank=True) date_of_birth = models.DateField() gender = models.CharField(max_length=6, choices=GENDER_CHOICES) department = models.CharField(max_length=200, choices=DEPARTMENT_CHOICES) phone_number = models.CharField(max_length=20) matric_number = models.CharField(max_length=20, unique=True) level = models.IntegerField(choices=LEVEL_CHOICES) year_enrolled = models.IntegerField(choices=YEAR_CHOICES) profile_pic = OptimizedImageField( upload_to='student_profile_pic', optimized_image_output_size=(400, 300), optimized_image_resize_method='cover' # 'thumbnail', 'cover' or None ) age = models.IntegerField(blank=True) address = models.CharField(max_length=5, choices=ADDRESS_CHOICES) reason = models.CharField(max_length=18, choices=REASON_CHOICES) mother_job = models.CharField(max_length=20, choices=JOB_CHOICES) father_job = models.CharField(max_length=20, choices=JOB_CHOICES) guardian = models.CharField(max_length=6, choices=GUARDIAN_CHOICES) student_access = models.BooleanField(default=True) def __str__(self): """Returns The Student's Matric Number When The Object Is Called""" return f'{self.matric_number}' def save(self, *args, **kwargs): """ Saves the Age of the Student """ days_in_year = 365.2425 age = int((date.today() - self.date_of_birth).days / days_in_year) self.age = age self.matric_number = self.matric_number.upper() super(Student, self).save(*args, **kwargs)
class Collaborator(models.Model): """ Collaborator model. This model represents a Blog Collaborator(a.k.a. Writter) with a few fields including a `profile_image` field which is an OptimizedImageField instance with `optimized_image_output_size` and `optimized_image_resize_method` arguments set. This means that our Collaborator profile_image would be a resized version of the source image, meant to keep a given screen resolution, in this case (400, 300) pixels. """ name = models.CharField( max_length=100 ) profile_image = OptimizedImageField( upload_to='uploads/collaborators/%Y/%m/%d', optimized_image_output_size=(400, 300), optimized_image_resize_method='cover' # 'thumbnail' or 'cover' ) created = models.DateTimeField( auto_now_add=True ) def __str__(self): return self.name class Meta: ordering = ['-created']
class userModel(models.Model): User = models.OneToOneField(User, on_delete=models.CASCADE, null=True) Icon = OptimizedImageField(default='images/avatar.jpg', optimized_image_output_size=(250, 250), optimized_image_resize_method='thumbnail', upload_to="images/") username = models.CharField(max_length=25) email = models.EmailField(max_length=50)
class RAGP_Carousel (models.Model): image=OptimizedImageField(optimized_image_output_size=(584,396),optimized_image_resize_method='cover') text=models.TextField() Button_text=models.CharField(max_length=20) link=models.URLField() def __str__(self): return self.text[:50]
class Certificates (models.Model): image= OptimizedImageField(optimized_image_output_size=(584,396),optimized_image_resize_method='cover', upload_to="image/",blank=True) organization=models.CharField(max_length=300) name=models.CharField(max_length=500) description=models.TextField() link=models.URLField() date_received=models.DateField() def __str__ (self): return f"{self.organization},{self.name}"
class Project(models.Model): image= OptimizedImageField(optimized_image_output_size=(584,396),optimized_image_resize_method='cover', upload_to="image/",blank=True) title=models.CharField (max_length=300) technologies=models.CharField (max_length=300) description=models.TextField () link=models.URLField() date=models.DateField() def __str__ (self): return self.title
class RAGP_Stories (models.Model): passport=OptimizedImageField(optimized_image_output_size=(584,396),optimized_image_resize_method='cover') name=models.CharField(max_length=50) story=models.TextField() def __str__(self): return self.name def summary (self): return self.story[:200]+" ..."
class Post(models.Model): title = models.CharField(max_length=100) photo = OptimizedImageField(upload_to='uploads/%Y/%m/%d') created = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title class Meta: ordering = ['-created']
class Volunteer (models.Model): image= OptimizedImageField(optimized_image_output_size=(584,396),optimized_image_resize_method='cover', upload_to="image/",blank=True) organization=models.CharField(max_length=300) position= models.CharField(max_length=300) achievement1=models.TextField(blank=True) achievement2=models.TextField(blank=True) start_date=models.DateField() end_date=models.DateField(null=True) def __str__ (self): return f"{self.position} at {self.organization}"
class Blog(models.Model): id = models.AutoField(primary_key=True) image = OptimizedImageField( upload_to='uploads/collaborators/%Y/%m/%d', null=True, blank=True ) time = models.DateTimeField(auto_now_add=True) tittle = models.CharField(max_length=100, null=True) content = models.CharField(max_length=999, null=True) def __str__(self): return self.tittle
class Banner(models.Model): img = OptimizedImageField( upload_to='uploads/collaborators/%Y/%m/%d', optimized_image_output_size=(1140, 475), optimized_image_resize_method='thumbnail', null=True, blank=True ) text = models.CharField(max_length=400, null=True) product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True) def __str__(self): return self.product.name
class Job(models.Model): image= OptimizedImageField(optimized_image_output_size=(584,396),optimized_image_resize_method='cover', upload_to="image/",blank=True) job_title=models.CharField (max_length=300) company=models.CharField(max_length=300) start_date=models.DateField() end_date= models.DateField(null=True) achievement1=models.TextField() achievement2=models.TextField(blank=True) achievement3=models.TextField(blank=True) def __str__ (self): return f"{self.job_title} at {self.company}"
class Brand(models.Model): name = models.CharField(max_length=200, null=True) image = OptimizedImageField( upload_to='uploads/collaborators/%Y/%m/%d', optimized_image_output_size=(100, 100), optimized_image_resize_method='thumbnail', # 'thumbnail', 'cover' or None null = True, blank = True ) user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True, blank=True) def __str__(self): return self.name
class ArticleImages(models.Model): image = image = OptimizedImageField( upload_to="Articles/images/", optimized_image_output_size=(400, 320), optimized_image_resize_method="cover", # 'thumbnail', 'cover' or None ) created_on = models.DateTimeField(auto_now=True) added_by = models.CharField(max_length=100) class Meta: db_table = "articleimage" verbose_name = "ArticleImage" verbose_name_plural = "ArticleImages"
class SchoolAdmin(models.Model): """Model That Represents The School Admin""" user = models.OneToOneField(User, on_delete=models.CASCADE) date_of_birth = models.DateField() gender = models.CharField(max_length=6, choices=GENDER_CHOICES) phone_number = models.CharField(max_length=20) schooladmin_access = models.BooleanField(default=True) profile_pic = OptimizedImageField( upload_to='admin_profile_pic', optimized_image_output_size=(400, 300), optimized_image_resize_method='cover' # 'thumbnail', 'cover' or None ) def __str__(self): """Returns The School Admin's First And Last Name When The Object Is Called""" return f'{self.user.first_name} {self.user.last_name}'
class Blog (models.Model): image=OptimizedImageField(optimized_image_output_size=(584,396),optimized_image_resize_method='cover') title=models.TextField() story=models.TextField() date=models.DateTimeField(auto_now=True) publisher= models.CharField(max_length=200) def summary (self): return self.story[:200]+"..." def pretty_date (self): return self.date.strftime('%b %e %Y') def __str__(self): return self.title
class Lecturer(models.Model): """Model That Represents The Lecturer""" user = models.OneToOneField(User, on_delete=models.CASCADE) date_of_birth = models.DateField() gender = models.CharField(max_length=6, choices=GENDER_CHOICES) department = models.CharField(max_length=200, choices=DEPARTMENT_CHOICES) position = models.CharField(max_length=200) phone_number = models.CharField(max_length=20) lecturer_access = models.BooleanField(default=True, blank=True, null=True) profile_pic = OptimizedImageField(upload_to='lecturer_profile_pic', optimized_image_output_size=(400, 300), optimized_image_resize_method='cover' # 'thumbnail', 'cover' or None ) def __str__(self): """Returns The Lecturer's First And Last Name When The Object Is Called""" return f'{self.user.first_name} {self.user.last_name}'
class Image(models.Model): src = OptimizedImageField('Image', upload_to=RandomFileName('uploads', 'images'), null=True, blank=True) def __str__(self): return self.src.name def save(self, *args, **kwargs): if not self.id: if self.src: self.src = compress_image(self.src) super(Image, self).save(*args, **kwargs) class Meta: verbose_name = 'изображение' verbose_name_plural = 'изображения'
class Category(TimeLog): name = models.CharField(max_length=50, unique=True) image = OptimizedImageField( upload_to="category", optimized_image_output_size=(240, 320), optimized_image_resize_method="thumbnail", default="def.png" # 'thumbnail', 'cover' or None ) slug = models.SlugField(unique=True, default=" ") description = models.TextField(default=" ", blank=True) def save(self, *args, **kwargs): self.slug = slugify(self.name) super().save(*args, **kwargs) class Meta: db_table = "category" verbose_name = "Category" verbose_name_plural = "Categories" ordering = ('-updated_at', )
class Product(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=200, null=True) price = models.FloatField() sales = models.FloatField(null=True, blank=True) year = models.CharField(max_length=200, null=True, blank=True) alcoholPercent = models.CharField(max_length=200, null=True, blank=True) color = models.CharField(max_length=200, null=True, blank=True) region = models.CharField(max_length=200, null=True, blank=True) variety = models.CharField(max_length=200, null=True, blank=True) brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, blank=True, null=True) type = models.CharField(max_length=200, null=True, blank=True) description = models.CharField(max_length=200, null=True, blank=True) image = OptimizedImageField( upload_to='uploads/collaborators/%Y/%m/%d', optimized_image_output_size=(200, 620), optimized_image_resize_method='thumbnail', null=True, blank=True ) quantity = models.IntegerField(default=1) production_technology = models.CharField(max_length=200, null=True, blank=True) def __str__(self): return self.name @property def imageURL(self): try: url = self.image.url except: url = '' return url def image_tag(self): from django.utils.safestring import mark_safe return mark_safe('<image src="%s" width="60" height="200" />' % self.imageURL) image_tag.short_description = 'Image' image_tag.allow_tags = True
class PostInfo(models.Model): title = models.CharField(max_length=255, unique=True, default=None) postId = models.UUIDField( primary_key=True, default=uuid.uuid1, editable=False) authorId = models.CharField(max_length=255, default=None, editable=False) category = models.ForeignKey( Categorie, on_delete=models.CASCADE, default=None) tags = models.CharField(max_length=255, default=None) body = HTMLField() featured_image = OptimizedImageField( upload_to="featured_image", optimized_image_output_size=(772, 440), optimized_image_resize_method='cover', blank=True, null=True ) meta_title = models.CharField(max_length=60, null=True, blank=True) slug = models.SlugField(max_length=75, unique=True, null=True, blank=True) meta_description = models.CharField(max_length=160, null=True, blank=True) class Meta: abstract = True
class Update(models.Model): id = models.AutoField(primary_key=True) name = models.CharField('Название обновления', max_length=512, default='Обновление', blank=True) description = models.TextField('Описание обновления', default='Описание', blank=True) release_date = models.DateField('Дата обновления', null=True, blank=True) logo = OptimizedImageField('Логотип обновления', upload_to=RandomFileName('uploads', 'logos'), null=True, blank=True) wallpaper = OptimizedImageField('Изображение для фона', upload_to=RandomFileName( 'uploads', 'wallpapers'), null=True, blank=True) score_list = models.ManyToManyField(Score, blank=True) screenshots = models.ManyToManyField(Image, blank=True) youtube = models.CharField('Ссылка на youtube видео (Video ID)', max_length=256, default='', blank=True) average_score = models.FloatField('Среднее значение оценок', default=0, blank=True) count_score = models.IntegerField('Количество оценок', default=0, blank=True) def calc_average_score(self): average = self.score_list.values('value').annotate( sum=Sum('value')).aggregate(average=Avg('sum'))['average'] return average if average is not None else 0 def save(self, *args, **kwargs): if self.id is not None: self.average_score = self.calc_average_score() self.count_score = self.score_list.count() if self.logo: self.logo = compress_image(self.logo) if self.wallpaper: self.wallpaper = compress_image(self.wallpaper) if self.description: self.description = self.description.replace('\r', '').replace( '\n', '<br/>') super(Update, self).save(*args, **kwargs) def __str__(self): return self.name class Meta: verbose_name = 'обновление' verbose_name_plural = 'обновления' ordering = ['name']
class SelfSportReport(models.Model): student = models.ForeignKey( 'Student', on_delete=models.CASCADE, null=False, blank=False, ) semester = models.ForeignKey( 'Semester', on_delete=models.CASCADE, null=False, blank=False, ) image = OptimizedImageField( upload_to=get_report_path, optimized_image_resize_method='thumbnail', null=True, blank=True, ) link = models.URLField( max_length=100, null=True, blank=True, validators=[URLValidator(schemes=['http', 'https'])]) # start = models.DateTimeField( # null=True, # blank=False, # ) # end = models.DateTimeField( # null=True, # blank=False, # ) training_type = models.ForeignKey( 'sport.SelfSportType', on_delete=models.SET_NULL, null=True, ) hours = models.DecimalField( max_digits=5, decimal_places=2, default=0, ) uploaded = models.DateTimeField(auto_now_add=True, null=False) approval = models.BooleanField(null=True) comment = models.TextField(max_length=1024, null=True, blank=True) class Meta: db_table = "self_sport_report" constraints = [ # empty image for some reason # is saved as empty string instead of null models.CheckConstraint(name="link_xor_image", check=(models.Q(link__isnull=True, ) & ~models.Q(image__exact='')) | models.Q( image__exact='', link__isnull=False, )) ] def get_submission_url(self) -> Tuple[SubmissionType, str]: if self.link is not None: submission_type = SubmissionType.LINK submission = self.link elif self.image is not None: submission_type = SubmissionType.IMAGE submission = self.image.url else: raise ValueError("Invalid object was provided") return submission_type, submission def save(self, *args, **kwargs): # update flag and approval only when object is created via API if not kwargs.get('force_insert', False): self.hours = max(self.hours, 0) self.approval = self.hours > 0 return super().save(*args, **kwargs) def __str__(self): return f"{self.student} {self.uploaded.strftime('%Y-%m-%d %H:%M:%S')} for {self.semester}"
class CorporateProfile(models.Model): id = models.CharField( primary_key=True, editable=False, max_length=10, help_text=_('The ID must match the ID of its associated user')) company_name = models.ForeignKey(verbose_name=_('Company Name'), to=CompanyName, on_delete=models.CASCADE) operator_type = models.CharField( verbose_name=_('Are you a travel agent or direct provider?'), blank=False, null=True, choices=OPERATOR_TYPE, max_length=8, default='AGENT') admin = models.ForeignKey(verbose_name=_('Company Administrator'), to=User, on_delete=models.SET_NULL, null=True) # Address Information address = models.CharField(verbose_name=_('Address'), max_length=100, blank=False) zip_code = models.CharField(verbose_name=_('ZIP Code'), max_length=7, blank=False) city = models.CharField(verbose_name=_('City'), max_length=75, blank=False) country = CountryField( verbose_name=_('Country'), default="DE", help_text=_( "This is the country where your firm's headquarter is in.")) main_lang_of_conversation = LanguageField( verbose_name=_("Your primary language for conversations"), default="de", blank=False, null=True) # Contact Information phone = models.CharField( verbose_name=_('Phone'), max_length=50, blank=False, help_text= _('Please provide your public phone number. Please DO NOT use country codes, ' 'instead provide the local format: 01234 000000000. Characters "+" and "/" ' 'are NOT allowed.')) contact_email = models.EmailField(verbose_name=_('Contact E-Mail'), blank=False) business_hours_days = ListField( verbose_name=_('Days the business is open'), blank=False) business_hours_start = models.TimeField( verbose_name=_('Business Hours Start'), blank=True, null=True) business_hours_end = models.TimeField(verbose_name=_('Business Hours End'), blank=True, null=True) business_hours_break_start = models.TimeField( verbose_name=_('Lunch Break Start'), blank=True, null=True) business_hours_break_end = models.TimeField( verbose_name=_('Lunch Break End'), blank=True, null=True) # Profile Information description = models.TextField(verbose_name=_('Description'), max_length=3000, blank=True, null=True) homepage = models.CharField(verbose_name=_('Homepage'), blank=True, null=True, max_length=75) title_pic = OptimizedImageField(verbose_name=_('Title Image'), upload_to="title_images/", blank=True, null=True) headline_image_position = models.IntegerField( verbose_name=_('Title Picture Position'), null=True, default=0) # Admin Data date_joined = models.DateTimeField(verbose_name=_('Date Joined'), auto_now_add=True) last_modified = models.DateTimeField(verbose_name=_('Last modified'), auto_now_add=True, null=True, blank=True) has_lead_contract = models.BooleanField( verbose_name=_('Contracted for leads'), default=False, choices=YNList) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): self.pk = self.admin.pk self.last_modified = timezone.now() return super(CorporateProfile, self).save(force_insert, force_update, using, update_fields) def __str__(self): return self.company_name.name