class Post(models.Model): category = models.ForeignKey( Category, on_delete=models.CASCADE, ) coursename = models.CharField(max_length=50) amount = models.CharField(max_length=10) content = RichTextField(default='content', blank=True, null=True) img = models.ImageField(null=True, blank=True, upload_to="headshots/") view_count = models.PositiveIntegerField(default=0) author = models.ForeignKey( User, on_delete=models.CASCADE, ) popular = models.BooleanField(null=True, blank=True) date_1 = models.DateField(null=True, blank=True) date_2 = models.DateField(null=True, blank=True) date_3 = models.DateField(null=True, blank=True) date_4 = models.DateField(null=True, blank=True) date_5 = models.DateField(null=True, blank=True) date_6 = models.DateField(null=True, blank=True) date_7 = models.DateField(null=True, blank=True) date_8 = models.DateField(null=True, blank=True)
class Page(models.Model): title = models.CharField( 'название', max_length=254) slug = models.SlugField( 'slug', allow_unicode=True, blank=True) icon = models.CharField( 'иконка', max_length=254, blank=True) content = RichTextField( 'контент', blank=True) order = models.PositiveIntegerField( default=0, blank=False, null=False) class Meta: default_related_name = 'pages' ordering = ['order'] verbose_name = 'страница' verbose_name_plural = 'страницы' def __str__(self): return self.title def save(self, *args, **kwargs): self.autoslug() super().save(*args, **kwargs) def autoslug(self): if not self.slug: self.slug = slugify(self.title, allow_unicode=True)
class Section(models.Model): headline = models.CharField('nadpis', max_length=50) link = models.CharField('odkaz v menu', max_length=25, unique=True) text = RichTextField('obsah', blank=True, null=True, default=None) slug = models.SlugField(editable=False, unique=True) widget = models.CharField(max_length=1, choices=widgets.Widget.get_choices(), null=True, editable=False) class Meta: verbose_name = 'text' verbose_name_plural = 'texty' ordering = ['id'] def save(self, *args, **kwargs): self.slug = slugify(self.headline) return super().save(*args, **kwargs) def __str__(self): return self.headline def get_widget(self): return widgets.Widget.get_class(self.widget)
class Goods(BaseModel): """ 商品SPU """ name = models.CharField(max_length=50, verbose_name='名称') brand = models.ForeignKey(Brand, on_delete=models.PROTECT, verbose_name='品牌') category1 = models.ForeignKey(GoodsCategory, on_delete=models.PROTECT, related_name='cat1_goods', verbose_name='一级类别') category2 = models.ForeignKey(GoodsCategory, on_delete=models.PROTECT, related_name='cat2_goods', verbose_name='二级类别') category3 = models.ForeignKey(GoodsCategory, on_delete=models.PROTECT, related_name='cat3_goods', verbose_name='三级类别') sales = models.IntegerField(default=0, verbose_name='销量') comments = models.IntegerField(default=0, verbose_name='评价数') # 富文本编辑器类型 desc_detail = RichTextUploadingField(default='', verbose_name='详细介绍') # 支持文件上传 desc_pack = RichTextField(default='', verbose_name='包装信息') desc_service = RichTextUploadingField(default='', verbose_name='售后服务') class Meta: db_table = 'tb_goods' verbose_name = '商品' verbose_name_plural = verbose_name def __str__(self): return self.name
class News(TimeStampedModel): """Можель новостей.""" title = models.CharField('Название', max_length=255) slug = models.SlugField(unique=True) short_text = RichTextField('Короткий текст', blank=True, null=True) full_text = RichTextUploadingField('Полный текст', blank=True, null=True) image = models.ImageField('Изображение', blank=True, null=True, upload_to='news/%Y/%m/%d/') is_visible = models.BooleanField('Отображать', default=True) is_on_home = models.BooleanField('Отображать на главной странице', default=True) published_at = models.DateTimeField('Опубликовано', default=datetime.now) def __str__(self): return self.title def get_absolute_url(self): return reverse('news:detail', kwargs={'slug': self.slug}) class Meta: verbose_name = 'Новость' verbose_name_plural = 'Новости'
class Questions(models.Model): """ Question Model """ # question = models.TextField() title = models.CharField(max_length=150) question = RichTextField(config_name='default') user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True) image = models.ImageField(null=True, blank=True) slug = models.SlugField(unique=True, blank=True, null=True) like = models.ManyToManyField(User, blank=True, related_name='liked_user') dislike = models.ManyToManyField(User, blank=True, related_name='disliked_user') like_count = models.IntegerField(default=0) dislike_count = models.IntegerField(default=0) time = models.DateTimeField(auto_now_add=True) tags = models.ManyToManyField(tags.models.Tag, blank=True) draft = models.BooleanField(default=False) # saved = models.BooleanField(default=False) saved = models.ManyToManyField(User, blank=True, related_name='lsaved_by_user') objects = QuestionManager() class Meta: ordering = ['-time'] def __str__(self): """ str method """ return str(f"{self.question} by {self.user}") def get_absolute_url(self): return reverse("questions:detail", kwargs={"pk": self.pk})
class Service(models.Model): serviceTitle = models.CharField( max_length=50, unique=True, verbose_name="Service Title", help_text="Maximum 50 character, unique.") serviceContent = RichTextField( verbose_name="Service Content") serviceIcon = models.CharField( max_length=50, default='<i class="fas fa-server fa-5x"></i>', verbose_name="Service Icon", help_text="You should paste Font Awesome Icon tag here. For icon size add fa-2x, fa-3x, fa-5x etc.. to end of the class.") serviceSlug = models.SlugField( max_length=50, unique=True, verbose_name="Service Slug", help_text="Url format of the Service Title, unique.") def __str__(self): return self.serviceTitle
class Post(models.Model): DRAFT = 'D' PUBLISHED = 'P' STATUS = ( (DRAFT, 'Draft'), (PUBLISHED, 'Published'), ) title = models.CharField(max_length=300) slug = models.SlugField(max_length=300, blank=True, null=True) author = models.ForeignKey(User, related_name="articles") content = RichTextField() create_date = models.DateTimeField(auto_now_add=True) update_date = models.DateTimeField(auto_now=True) article_image = models.ImageField(upload_to=upload_to, null=True) status = models.CharField(max_length=1, choices=STATUS, default=DRAFT) class Meta: verbose_name = 'Post' verbose_name_plural = 'Posts' ordering = ('-create_date', ) def __str__(self): return self.title def save(self, *args, **kwargs): if not self.pk: super(Post, self).save(*args, **kwargs) else: self.update_date = datetime.now() if not self.slug: slug_str = "%s %s" % (self.pk, self.title.lower()) self.slug = slugify(slug_str) super(Post, self).save(*args, **kwargs) def get_absolute_url(self): return reverse('post', args=[self.slug])
class Article(models.Model): author = models.ForeignKey("auth.User", on_delete=models.CASCADE, verbose_name="Ekleyen") pic = models.FileField(blank=True, null=True, verbose_name="Fotoğraf") year = models.PositiveIntegerField( default=2020, validators=[MaxValueValidator(2021), MinValueValidator(1980)], verbose_name="Yıl") km = models.PositiveIntegerField(verbose_name="Km") price = models.PositiveIntegerField(verbose_name="Fiyat") make = models.CharField(max_length=20, verbose_name="Marka") model = models.CharField(max_length=20, verbose_name="Model") transmission = models.TextField(choices=Transmission, verbose_name="Vites") fuelType = models.TextField(choices=FuelTypes, verbose_name="Yakıt") bodyType = models.TextField(choices=BodyTypes, verbose_name="Kasa") engine = models.CharField(blank=True, null=True, max_length=20, verbose_name="Motor") variant = models.CharField(blank=True, null=True, max_length=20, verbose_name="Paket") content = RichTextField(blank=True, null=True, verbose_name="Detay") isSold = models.BooleanField(default=False, verbose_name="Durum") highlighted = models.BooleanField(default=False, verbose_name="Öne Çıkar") date = models.DateTimeField(auto_now_add=True, verbose_name="Tarih") def __str__(self): return self.make class Meta: ordering = ['-date']
class Comments(MPTTModel): article = models.ForeignKey(ArticlePost, on_delete=models.CASCADE, related_name='comments') user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comments') parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, related_name='children') reply_to = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE, related_name='replyers') body = RichTextField() created = models.DateTimeField(auto_now=True) class MPPTMeta: order_insertion_by = ['created'] def __str__(self): return self.body[:20]
class Blog(models.Model): title = models.CharField(max_length=255) category = models.ForeignKey(BlogCategory, on_delete=models.CASCADE) author = models.ForeignKey(User, on_delete=models.CASCADE) content = RichTextField(blank=True, null=True) image = models.ImageField(upload_to='images/blog/') image_thumbnail = ImageSpecField(source='image', processors=[ResizeToFill(1024, 610)], format='jpeg', options={'quality': 100}) small_image_thumbnail = ImageSpecField(source='image', processors=[ResizeToFill(200, 200)], format='jpeg', options={'quality': 100}) added_date = models.DateTimeField(auto_now_add=True) is_published = models.BooleanField(default=False) pub_date = models.DateTimeField(blank=True, null=True) slug = models.SlugField(blank=True) def __str__(self): return f"{self.title} by {self.author.username}" def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.title + self.author.username) return super().save(*args, **kwargs) def no_of_comments(self): return Comments.objects.filter(post=self).count() def get_absolute_url(self): return reverse("blog:blog-detail", kwargs={ "slug": self.slug, 'pk': self.pk })
class SimplePageModel(MPTTModel, SimpleContentModel, PublisherModel): u""" Classe abstrata com os dados de uma página simples de cms """ parent = TreeForeignKey('self', verbose_name=_(u"Pai"), null=True, blank=True, related_name='children') content = RichTextField(verbose_name=_(u"Conteúdo")) redirect_to = TreeForeignKey('self', verbose_name=_(u"Redirecionar para página"), null=True, blank=True, related_name='redirected_from') redirect_to_url = models.URLField( verbose_name=_(u"Redirecionar para esta URL"), blank=True) class Meta: abstract = True
class Suministro(BaseModel): MUNICIPALITY_CHOICES = [(value, label) for value, label in MUNICIPALITIES.items()] title = models.CharField(max_length=255) slug = AutoSlugField(populate_from=["title", "municipality"], overwrite_on_add=False) municipality = models.CharField(max_length=255, choices=MUNICIPALITY_CHOICES) content = RichTextField() def __str__(self): return self.title def save(self, *args, **kwargs): super().save(*args, **kwargs) self.invalidate_cache() def invalidate_cache(self): cache.delete_many([ "suministro-list", f"suministro-municipio-list:{self.municipality}", f"suministro-detail:{self.slug}", ])
class Post(ModeloBase): titulo = models.CharField('Titulo del Post', max_length=150, unique=True) slug = models.CharField('Slug', max_length=150, unique=True) descripcion = models.TextField('Descripción') autor = models.ForeignKey(Autor, on_delete=models.CASCADE) categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE) contenido = RichTextField() imagen_referencial = models.ImageField( 'Imagen Referencial', upload_to='imagenes/', max_length=255) publicado = models.BooleanField('Publicado/No publicado', default=False) destacado = models.BooleanField('Destacado/No destacado', default=False) fecha_publicacion = models.DateField('Fecha de publicación') imagen_1 = models.ImageField( 'Imagen 1', upload_to='imagenes/', max_length=255, null=True, blank=True) imagen_2 = models.ImageField( 'Imagen 2', upload_to='imagenes/', max_length=255, null=True, blank=True) imagen_3 = models.ImageField( 'Imagen 3', upload_to='imagenes/', max_length=255, null=True, blank=True) imagen_4 = models.ImageField( 'Imagen 4', upload_to='imagenes/', max_length=255, null=True, blank=True) imagen_5 = models.ImageField( 'Imagen 5', upload_to='imagenes/', max_length=255, null=True, blank=True) imagen_6 = models.ImageField( 'Imagen 6', upload_to='imagenes/', max_length=255, null=True, blank=True) imagen_7 = models.ImageField( 'Imagen 7', upload_to='imagenes/', max_length=255, null=True, blank=True) imagen_8 = models.ImageField( 'Imagen 8', upload_to='imagenes/', max_length=255, null=True, blank=True) class Meta: verbose_name = 'Post' verbose_name_plural = 'Posts' ordering = ['-fecha_publicacion'] def __str__(self): return self.titulo
class Post(models.Model): STATUS = ( ('rascunho', 'Rascunho'), ('pubicado', 'Publicado'), ) titulo = models.CharField(verbose_name="Título", max_length=250) slug = models.SlugField(max_length=250) autor = models.ForeignKey(User, on_delete=models.CASCADE) categoria = models.ManyToManyField(Category, related_name="get_posts") imagem = models.ImageField(upload_to="blog", blank=True, null=True) conteudo = RichTextField(verbose_name="conteúdo") publicado = models.DateTimeField(default=timezone.now) criado = models.DateTimeField(auto_now_add=True) alterado = models.DateTimeField(auto_now=True) status = models.CharField(max_length=10, choices=STATUS, default='rascunho') objects = models.Manager() published = PublishedManager() def get_absolute_url(self): return reverse('Post_detail', args=[self.slug]) def get_absolute_url_update(self): return reverse('Post_edit', args=[self.pk]) def view_image(self): return mark_safe('<img src="%s" width="400px"/>' % self.imagem.url) view_image.short_description = "imagem cadastrada" view_image.allow_tags = True class Meta: ordering = ('-publicado', ) def __str__(self): return self.titulo
class Post(CommonPage): class Meta: verbose_name = u'Статья' verbose_name_plural = u'Статьи' app_label = 'blog' ordering = ('sort', ) def get_absolute_url(self): return reverse('blog:detail', args=(self.slug, )) def save(self, *args, **kwargs): super(Post, self).save() if self.image: image = Image.open(self.image) (width, height) = image.size size = (800, 800) "Max width and height 800" if width > 800: image.thumbnail(size, Image.ANTIALIAS) image.save(self.image.path, "PNG") postsection = models.ForeignKey(to=PostSection, verbose_name=u'Категория', blank=True, null=True) image = models.ImageField(verbose_name=u'Изображения', upload_to=upload_to, blank=True, null=True) video = models.TextField(verbose_name=u'HTML код видео', blank=True, null=True) description = RichTextField(verbose_name=u'Описание') slug = models.SlugField(max_length=100, verbose_name=u'url') sort = models.PositiveIntegerField(default=1, verbose_name=u'Сортировка') send = models.BooleanField(default=False)
class PageContent(models.Model): page = models.CharField(max_length=255, choices=PAGE_CONTENT_CHOICES, primary_key=True) content = RichTextField( blank=True, null=True, config_name="custom") #CKEditor Rich Text Editor Field is_html = models.BooleanField( default=False, help_text= 'Select this if you want to use raw HTML instead. For this option, use the "HTML content" window below.' ) html_content = models.TextField(blank=True, null=True, help_text='raw html if html == True') class Meta: verbose_name_plural = 'Page Contents' def __unicode__(self): return unicode("%s" % (self.page)) def __str__(self): return self.page
class Post(models.Model): title = models.CharField(max_length=255) header_image = models.ImageField(null=True, blank=True, upload_to="images/") title_tag = models.CharField(max_length=255) author = models.ForeignKey(User, on_delete=models.CASCADE) body = RichTextField(blank=True, null=True) # body = models.TextField() post_date = models.DateField(auto_now_add=True) category = models.CharField(max_length=255, default='Coding') snippet = models.CharField(max_length=255) likes = models.ManyToManyField(User, related_name='blog_posts') def total_likes(self): return self.likes.count() def __str__(self): return self.title + ' | ' + str(self.author) @staticmethod def get_absolute_url(): # return reverse('article-details', args=(str(self.id))) return reverse('home')
class Employee(models.Model): name = models.CharField(max_length=50, verbose_name="Nombre") deparment = models.ForeignKey(Deparment, verbose_name="Departamento", on_delete=models.CASCADE) position = models.ForeignKey(Position, verbose_name="Posicion", on_delete=models.CASCADE) createdby = models.ForeignKey(User, verbose_name="Creado por", on_delete=models.CASCADE) description = RichTextField(verbose_name="Descripcion") skills = models.ManyToManyField(Skills, verbose_name="Habilidades") image = models.ImageField(verbose_name="Imagen", upload_to="team") created = models.DateTimeField(auto_now_add=True, verbose_name="Creado") updated = models.DateTimeField(auto_now=True, verbose_name="Actualizado") class Meta: verbose_name = "Empleado" verbose_name_plural = "Empleados" ordering = ["-created"] def __str__(self): return self.name
class Page(models.Model): NAV_POSITION = ( ('01', '01'), ('02', '02'), ('03', '03'), ('04', '04'), ('05', '05'), ('06', '06'), ) title = models.CharField(max_length=250) slug = models.SlugField(max_length=250, unique=True) body = RichTextField() nav_position = models.CharField(max_length=20, choices=NAV_POSITION, default='01') objects = models.Manager() def __str__(self): return self.title def get_absolute_url(self): return reverse('pages', args=[self.slug])
class Problem(models.Model): contest = models.ForeignKey(Contest) problemSetter = models.CharField(max_length=200) problemTitle = models.CharField(max_length=200) problemStatement = RichTextField(config_name='awesome_ckeditor') testInput = models.FileField(upload_to='testInput') testOutput = models.FileField(upload_to='testOutput') marks = models.PositiveSmallIntegerField() timeLimit = models.PositiveSmallIntegerField() languagesAllowed = models.CommaSeparatedIntegerField(max_length=200) inputFormat = RichTextField(config_name='awesome_ckeditor') outputFormat = RichTextField(config_name='awesome_ckeditor') constraints = RichTextField(config_name='awesome_ckeditor') sampleInput = RichTextField(config_name='awesome_ckeditor') sampleOutput = RichTextField(config_name='awesome_ckeditor') solvedBy = models.PositiveSmallIntegerField(default=0) def __unicode__(self): return self.problemTitle
class CompanyInfo(models.Model): name = models.CharField(_("Name"), max_length=100) phone = models.CharField(_("Phone number"), max_length=30) email = models.EmailField(_("E-mail"), ) street = models.CharField(_("Street"), max_length=100) zip_city = models.CharField(_("Zip Code/City"), max_length=100) start_time = models.TimeField(_("Start time"), ) end_time = models.TimeField(_("End time"), ) about = RichTextField(verbose_name=_("About"), ) delivery = RichTextField(verbose_name=_("Delivery"), ) privacy = RichTextField(verbose_name=_("Privacy"), ) returns = RichTextField(verbose_name=_("Returns"), ) contact_us = RichTextField(verbose_name=_("Contact us"), ) jobs = RichTextField(verbose_name=_("Jobs"), ) class Meta: verbose_name = _("Company information") verbose_name_plural = _("Company informations") def __str__(self): return f"Company {self.name} - Details"
class Post(models.Model): user = models.ForeignKey('auth.User', verbose_name='yazar', on_delete=models.CASCADE, related_name='posts') genre = models.CharField(max_length=40, verbose_name="Tür") title = models.CharField(max_length=60, verbose_name="Başlık") imgfield = models.ImageField(verbose_name=" Ana Resim alanı", blank=True) text1 = RichTextField(verbose_name="ana metin", blank=True) step1 = models.CharField(max_length=120, verbose_name="adım 1", blank=True) imgfield1 = models.ImageField(verbose_name="Resim alanı1", blank=True) text2 = RichTextField(verbose_name="metin 1", blank=True) step2 = models.CharField(max_length=120, verbose_name="adım 2", blank=True) imgfield2 = models.ImageField(verbose_name="Resim alanı 2", blank=True) text3 = RichTextField(verbose_name="metin 3", blank=True) step3 = models.CharField(max_length=120, verbose_name="adım 3", blank=True) imgfield3 = models.ImageField(verbose_name="Resim alanı 3", blank=True) text4 = RichTextField(verbose_name="metin 4", blank=True) step4 = models.CharField(max_length=120, verbose_name="adım 4", blank=True) imgfield4 = models.ImageField(verbose_name="Resim alanı 4", blank=True) text5 = RichTextField(verbose_name="metin 5", blank=True) step5 = models.CharField(max_length=120, verbose_name="adım 5", blank=True) imgfield5 = models.ImageField(verbose_name="Resim alanı 5", blank=True) text6 = RichTextField(verbose_name="metin 6", blank=True) publishing_date = models.DateTimeField(verbose_name="Tarih", auto_now_add=True) slug = models.SlugField(unique=True) def __str__(self): return self.title def get_absolute_url(self): return "/post/{}".format(self.slug) class Meta: ordering = ["-publishing_date", "id"]
class Job(models.Model): SENIORITY_CHOICES = ( ('low', 'Low'), ('mid', 'Mid'), ('high', 'High'), ('executive', 'Executive'), ) APPLICATION_ROUTE_CHOICES = ( ('direct', 'Apply Direct'), ('seo', 'Apply through SEO'), ) job_title = models.CharField(max_length=100) company_name = models.CharField(max_length=50) location = models.CharField(max_length=50) industry = models.CharField(max_length=50, blank=True) job_function = models.CharField(max_length=50, blank=True) seniority = models.CharField(max_length=20, blank=True, choices=SENIORITY_CHOICES) application_route = models.CharField(max_length=20, blank=True, choices=APPLICATION_ROUTE_CHOICES) min_salary = models.DecimalField(null=True, blank=True, max_digits=9, decimal_places=2) max_salary = models.DecimalField(null=True, blank=True, max_digits=9, decimal_places=2) job_detail = RichTextField(blank=True, config_name='seojob_ckeditor') summary = models.TextField() external_url = models.URLField(blank=True) apply_url = models.URLField(blank=True) is_public = models.BooleanField(default=False) date_publish = models.DateTimeField(default=timezone.datetime.now) date_expire = models.DateTimeField(null=True, blank=True) date_updated = models.DateTimeField() objects = JobQuerySet.as_manager() # TODO: add view counts somewhere def __str__(self): return '{} {}'.format(self.job_title, self.company_name) def save(self, *args, **kwargs): self.date_updated = timezone.datetime.now() super(Job, self).save(*args, **kwargs) def get_absolute_url(self): return reverse('seo_job:job_detail', kwargs={'pk': self.pk}) def listing_url(self): if self.external_url: return self.external_url else: return self.get_absolute_url()
class footer(models.Model): faq = RichTextField() career = RichTextField() privacy = RichTextField()
class Courses(models.Model): course = models.CharField(blank=False, max_length=255) detail = RichTextField() image = models.ImageField(upload_to ='images/course',default='')
class Aboutus(models.Model): Introduction = RichTextField(blank=False) Facilities = RichTextField(blank =False) def __str__(self): return self.Introduction
class EnrichPods(models.Model): video = models.ForeignKey(Pod, verbose_name=_('video')) title = models.CharField(_('title'), max_length=100) slug = models.SlugField( _('slug'), unique=True, max_length=105, help_text= _(u'Used to access this instance, the "slug" is a short label containing only letters, numbers, underscore or dash top.' ), editable=False) #is_chapter = models.BooleanField(_('Is chapter ?'), default=False, help_text=_('Is chapter ?')) stop_video = models.BooleanField( _('Stop video'), default=False, help_text=_('The video will pause when displaying this enrichment.')) start = models.PositiveIntegerField( _('Start'), default=0, help_text=_('Start of enrichment display in seconds')) end = models.PositiveIntegerField( _('End'), default=1, help_text=_('End of enrichment display in seconds')) ENRICH_CHOICES = ( ("image", _("image")), ("richtext", _("richtext")), ("weblink", _("weblink")), ("document", _("document")), ("embed", _("embed")), ) type = models.CharField(_('Type'), max_length=10, choices=ENRICH_CHOICES, null=True, blank=True) image = FilerImageField(null=True, blank=True, verbose_name="Image", related_name="chapter_image") richtext = RichTextField(_('richtext'), config_name='complete', blank=True) weblink = models.URLField(_(u'Web link'), max_length=200, null=True, blank=True) document = FilerFileField( null=True, blank=True, verbose_name="Document", help_text=_(u'Integrate an document (PDF, text, html)')) embed = models.TextField(_('Embed'), max_length=300, null=True, blank=True, help_text=_(u'Integrate an external source')) class Meta: verbose_name = _("Enrichment") verbose_name_plural = _("Enrichments") ordering = ['start'] #unique_together = ("video", "start") def __unicode__(self): return u"Media : %s - video: %s" % (self.title, self.video) def __str__(self): return u"Media : %s - video: %s" % (self.title, self.video) def clean(self): # Don't allow draft entries to have a pub_date. msg = [] msg = self.verify_end_start_item() + self.verify_all_fields() + \ self.overlap() if (len(msg) > 0): raise ValidationError(msg) def verify_all_fields(self): msg = [] if (not self.title or (self.title == "") or (len(self.title) < 2) or (len(self.title) > 100)): msg.append(_('Please enter a title from 2 to 100 characters.')) if ((self.start == "") or (self.start < 0) or (self.start >= self.video.duration)): msg.append( _('Please enter a correct start field between 0 and %(duration)s.' ) % {"duration": self.video.duration - 1}) if (not self.end or (self.end == "") or (self.end <= 0) or (self.end > self.video.duration)): msg.append( _('Please enter a correct end field between 1 and %(duration)s.' ) % {"duration": self.video.duration}) if (self.type == "image"): if (not self.image): msg.append(_('Please enter a correct image.')) elif (self.type == "richtext"): if (not self.richtext): msg.append(_('Please enter a correct richtext.')) elif (self.type == "weblink"): if (not self.weblink): msg.append(_('Please enter a correct weblink.')) elif (self.type == "document"): if (not self.document): msg.append(_('Please select a document.')) elif (self.type == "embed"): if (not self.embed): msg.append(_('Please enter a correct embed.')) else: msg.append(_('Please enter a type in index field.')) if (len(msg) > 0): return msg else: return [] def verify_end_start_item(self): msg = [] video = Pod.objects.get(id=self.video.id) if (self.start > self.end): msg.append( _('The value of the start field is greater than the value of end field.' )) elif (self.end > video.duration): msg.append( _('The value of end field is greater than the video duration.') ) elif (self.start == self.end): msg.append(_('End field and start field can\'t be equal.')) if (len(msg) > 0): return msg else: return [] def overlap(self): msg = [] instance = None if self.slug: instance = EnrichPods.objects.get(slug=self.slug) list_enrichment = EnrichPods.objects.filter(video=self.video) if instance: list_enrichment = list_enrichment.exclude(id=instance.id) if len(list_enrichment) > 0: for element in list_enrichment: if not ( (self.start < element.start and self.end <= element.start) or (self.start >= element.end and self.end > element.end)): msg.append( _("There is an overlap with the enrichment " + element.title + ", please change start and/or end values.")) if len(msg) > 0: return msg return [] def save(self, *args, **kwargs): newid = -1 if not self.id: try: newid = get_nextautoincrement(EnrichPods) except: try: newid = EnrichPods.objects.latest('id').id newid += 1 except: newid = 1 else: newid = self.id newid = '%04d' % newid self.slug = "%s-%s" % (newid, slugify(self.title)) super(EnrichPods, self).save(*args, **kwargs)
class Recorder(models.Model): # Recorder name name = models.CharField(_("name"), max_length=200, unique=True) # Description of the recorder description = RichTextField(_("description"), config_name="complete", blank=True) # IP address of the recorder address_ip = models.GenericIPAddressField( _("Address IP"), unique=True, help_text=_("IP address of the recorder.") ) # Salt for salt = models.CharField( _("salt"), max_length=50, blank=True, help_text=_("Recorder salt.") ) # Recording type (video, AUdioVideoCasst, etc) recording_type = models.CharField( _("Recording Type"), max_length=50, choices=RECORDER_TYPE, default=RECORDER_TYPE[0][0], ) # Manager of the recorder who received mails user = select2_fields.ForeignKey( User, on_delete=models.CASCADE, limit_choices_to={"is_staff": True}, help_text=_( "Manager of this recorder. This manager will receive recorder " "emails and he will be the owner of the published videos. If no " "user is selected, this recorder will use manual assign system." ), verbose_name=_("User"), null=True, blank=True, ) # Additionnal additional_users additional_users = select2_fields.ManyToManyField( User, blank=True, ajax=True, js_options={"width": "off"}, verbose_name=_("Additional users"), search_field=select_recorder_user(), related_name="users_recorders", help_text=_( "You can add additionals users to the recorder. They " "will become the additionnals owners of the published videos " "and will have the same rights as the owner except that they " "can't delete the published videos." ), ) # Default type of published videos by this recorder type = models.ForeignKey( Type, on_delete=models.CASCADE, help_text=_("Video type by default.") ) is_draft = models.BooleanField( verbose_name=_("Draft"), help_text=_( "If this box is checked, " "the video will be visible and accessible only by you " "and the additional owners." ), default=True, ) is_restricted = models.BooleanField( verbose_name=_("Restricted access"), help_text=_( "If this box is checked, " "the video will only be accessible to authenticated users." ), default=False, ) restrict_access_to_groups = select2_fields.ManyToManyField( Group, blank=True, verbose_name=_("Groups"), help_text=_("Select one or more groups who can access to this video"), ) password = models.CharField( _("password"), help_text=_("Viewing this video will not be possible without this password."), max_length=50, blank=True, null=True, ) cursus = models.CharField( _("University course"), max_length=1, choices=CURSUS_CODES, default="0", help_text=_("Select an university course as audience target of the content."), ) main_lang = models.CharField( _("Main language"), max_length=2, choices=LANG_CHOICES, default=get_language(), help_text=_("Select the main language used in the content."), ) transcript = models.BooleanField( _("Transcript"), default=False, help_text=_("Check this box if you want to transcript the audio. (beta version)"), ) tags = TagField( help_text=_( "Separate tags with spaces, " "enclose the tags consist of several words in quotation marks." ), verbose_name=_("Tags"), ) discipline = select2_fields.ManyToManyField( Discipline, blank=True, verbose_name=_("Disciplines") ) licence = models.CharField( _("Licence"), max_length=8, choices=LICENCE_CHOICES, blank=True, null=True, ) channel = select2_fields.ManyToManyField( Channel, verbose_name=_("Channels"), blank=True ) theme = models.ManyToManyField( Theme, verbose_name=_("Themes"), blank=True, help_text=_( 'Hold down "Control", or "Command" ' "on a Mac, to select more than one." ), ) allow_downloading = models.BooleanField( _("allow downloading"), default=False, help_text=_("Check this box if you to allow downloading of the encoded files"), ) is_360 = models.BooleanField( _("video 360"), default=False, help_text=_("Check this box if you want to use the 360 player for the video"), ) disable_comment = models.BooleanField( _("Disable comment"), help_text=_("Allows you to turn off all comments on this video."), default=False, ) # Directory name where videos of this recorder are published directory = models.CharField( _("Publication directory"), max_length=50, unique=True, help_text=_("Basic directory containing the videos published by the recorder."), ) sites = models.ManyToManyField(Site) def __unicode__(self): return "%s - %s" % (self.name, self.address_ip) def __str__(self): return "%s - %s" % (self.name, self.address_ip) def ipunder(self): return self.address_ip.replace(".", "_") def save(self, *args, **kwargs): super(Recorder, self).save(*args, **kwargs) class Meta: verbose_name = _("Recorder") verbose_name_plural = _("Recorders") ordering = ["name"]
class ContentFrom(forms.Form, FormMixin): content = RichTextField()