예제 #1
0
class WebContent(models.Model):
    content = RichTextUploadingField(verbose_name="内容")

    class Meta:
        managed = False
        db_table = 'web_content'
예제 #2
0
class BuildingDetial(models.Model):
    '''楼盘详情'''
    '''主表'''
    '''类型'''
    land = models.ForeignKey(LandDistrict, on_delete=models.CASCADE, null=True, blank=True, verbose_name='地区')
    train = models.ForeignKey(SubwayStation, on_delete=models.CASCADE, null=True, blank=True, verbose_name='地铁站')
    budling_other = models.ForeignKey(BuildingClassfiy, on_delete=models.CASCADE, null=True, blank=True, verbose_name='楼盘其他类型')

    '''销售信息'''
    building_name = models.CharField(max_length=20, verbose_name='楼房名称')
    total_price = models.CharField(max_length=10, blank=True, null=True, verbose_name='参考总价')
    unit_price = models.CharField(max_length=100, blank=True, null=True, verbose_name='参考单价')
    house_section = models.CharField(max_length=20, blank=True, null=True, verbose_name='户型')
    sale_stage = models.CharField(max_length=20, blank=True, null=True, verbose_name='销售阶段')
    sale_stage_time = models.CharField(max_length=20, blank=True, null=True, verbose_name='销售阶段截止日期')
    sale_building_location = models.CharField(max_length=50,blank=True, null=True,  verbose_name='售楼地址')
    premises_location = models.CharField(max_length=50,blank=True, null=True,  verbose_name='楼盘地址')
    delivery_time = models.CharField(max_length=25, blank=True, null=True, verbose_name='交房时间')
    '''经纬度'''
    longitude = models.CharField(max_length=255, blank=True, null=True, verbose_name='经度')
    latitude = models.CharField(max_length=255, blank=True, null=True, verbose_name='纬度')
    '''基本信息'''
    building_nickname = models.CharField(max_length=20, blank=True, null=True, verbose_name='楼盘别名')
    building_classfiy = models.CharField(max_length=20, blank=True, null=True, verbose_name='楼盘类型')
    equity_year = models.CharField(max_length=20, blank=True, null=True, verbose_name='产权年限')
    green_rate = models.CharField(max_length=10, blank=True, null=True, verbose_name='绿化率')
    volume_rate = models.CharField(max_length=10, blank=True, null=True, verbose_name='容积率')
    stall_message = models.CharField(max_length=20, blank=True, null=True, verbose_name='车位信息')
    cube_count = models.CharField(max_length=20, blank=True, null=True, verbose_name='楼栋数')
    all_house_count = models.CharField(max_length=20, blank=True, null=True, verbose_name='总户数')
    floor_space = models.CharField(max_length=20, blank=True, null=True, verbose_name='占地面积')
    covered_area = models.CharField(max_length=20, blank=True, null=True, verbose_name='建筑面积')
    covered_classfiy = models.CharField(max_length=20, blank=True, null=True, verbose_name='建筑类型')
    covered_tier = models.CharField(max_length=20, blank=True, null=True, verbose_name='建筑楼层')
    company = models.CharField(max_length=50, blank=True, null=True, verbose_name='物业公司')
    company_money = models.CharField(max_length=50, blank=True, null=True, verbose_name='物业费')
    upstart = models.CharField(max_length=50, blank=True, null=True, verbose_name='开发商')
    tier_condition = models.CharField(max_length=100, blank=True, null=True, verbose_name='楼层状况')
    '''周边配套'''
    train_traffic = models.CharField(max_length=255, blank=True, null=True, verbose_name='地铁交通')
    bus_site = models.CharField(max_length=255, blank=True, null=True, verbose_name='公交站点')
    school = models.CharField(max_length=255, blank=True, null=True, verbose_name='学校')
    bank = models.CharField(max_length=255, blank=True, null=True, verbose_name='银行')
    catering = models.CharField(max_length=100, blank=True, null=True, verbose_name='餐饮')
    hospital = models.CharField(max_length=255, blank=True, null=True, verbose_name='医院')
    shopping = models.CharField(max_length=255, blank=True, null=True, verbose_name='购物中心')
    park = models.CharField(max_length=255, blank=True, null=True, verbose_name='公园')
    other_mating = models.TextField(blank=True, null=True, verbose_name='其他配套')
    '''简介'''
    building_intro = RichTextUploadingField(blank=True, null=True, verbose_name='楼盘简介')
    '''广告与关注'''
    AD_INDEX_CHOICES = ((0, 'yes'),(1, 'no'))
    AD_BUILDING_CHOICES = ((0, 'yes'),(1, 'no'))
    LUN_BO_CHOICES = ((0, 'yes'),(1, 'no'))
    if_index_advertising = models.SmallIntegerField(choices=AD_INDEX_CHOICES, default=0, verbose_name='是否在首页广告')
    if_lunbo_choice = models.SmallIntegerField(choices=LUN_BO_CHOICES, default=0, verbose_name='是否轮播图')
    if_building_detail_advertising = models.SmallIntegerField(choices=AD_BUILDING_CHOICES, default=0, verbose_name='是否在楼盘广告')
    attention_degree = models.IntegerField(default=0, blank=True, null=True, verbose_name='浏览量')
    comment_count = models.IntegerField(default=0, blank=True, null=True, verbose_name='评论量')
    '''开盘信息'''
    open_house_number = models.CharField(max_length=50, blank=True, null=True, verbose_name='开盘栋数')
    open_price = models.CharField(blank=True, null=True, max_length=50, verbose_name='开盘价格')
    decorate_situation = models.CharField(max_length=20, blank=True, null=True, verbose_name='装修情况')
    open_house_section = models.CharField(max_length=20, blank=True, null=True, verbose_name='开盘户型区间')
    open_house_count = models.CharField(max_length=20,blank=True, null=True,  verbose_name='开盘房源套数')
    registration_way = models.CharField(max_length=20, blank=True, null=True, verbose_name='报名方式')
    cool_captial_request = models.CharField(max_length=20, blank=True, null=True, verbose_name='冻资要求')
    '''楼盘房源类型'''
    house_count = models.CharField(max_length=50,blank=True, null=True,  verbose_name='房源套数') #??切换楼栋?
    people_count = models.CharField(max_length=30,blank=True, null=True,  verbose_name='报名人数')
    win_probability = models.CharField(max_length=30,blank=True, null=True,  verbose_name='摇中概率')

    will_sale_number = models.CharField(max_length=15, null=True, blank=True, verbose_name='预售证号')
    give_number_time = models.DateField(auto_now_add=False, null=True, blank=True, verbose_name='发证时间')
    lottery_count = models.CharField(max_length=50, null=True, blank=True, verbose_name='摇号批次')

    building_create_time = models.DateField(auto_now_add=True, blank=True, null=True, verbose_name='开盘时间')
    create_time = models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='数据创建时间')
    union_building_test_id = models.IntegerField(blank=True, null=True, verbose_name='楼盘联合id')

    class Meta:
        db_table = 'tb_building_detial'
        verbose_name = '楼盘详情'
        managed = True
        verbose_name_plural = verbose_name

    def __str__(self):
        return '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s' % (self.id,self.will_sale_number,self.give_number_time,self.lottery_count, self.building_create_time, self.win_probability, self.people_count, self.house_count, self.cool_captial_request, self.registration_way, self.open_house_count, self.open_house_section, self.decorate_situation, self.open_house_number, self.comment_count, self.attention_degree, self.if_index_advertising, self.if_building_detail_advertising, self.building_intro, self.other_mating, self.park, self.shopping, self.catering, self.hospital, self.bank, self.bus_site, self.train_traffic, self.tier_condition, self.upstart, self.company, self.covered_tier, self.covered_classfiy, self.covered_area, self.floor_space, self.all_house_count, self.cube_count, self.stall_message, self.volume_rate, self.green_rate, self.equity_year, self.building_classfiy, self.building_nickname, self.latitude, self.longitude, self.delivery_time, self.premises_location, self.sale_building_location, self.sale_stage, self.house_section, self.unit_price, self.total_price, self.building_name, self.budling_other.name, self.train.name, self.land.name, self.if_lunbo_choice, self.company_money)
예제 #3
0
파일: models.py 프로젝트: huydangg/about-me
class Post(TimeStampedModel, SoftDeletableModel, models.Model):
    title = models.CharField(_('Title'), max_length=250)
    content = RichTextUploadingField(_('Content'))
    author = models.ForeignKey(User, on_delete=models.CASCADE)
예제 #4
0
class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = RichTextUploadingField('Biografia', null=True, blank=True)
    website = models.URLField(default='')
    image = models.ImageField(upload_to='profile_image', blank=True)
예제 #5
0
class Opportunity(models.Model):
    locations = (
        ('Eastern Cape', 'Eastern Cape'),
        ('Free State', 'Free State'),
        ('Gauteng', 'Gauteng'),
        ('KwaZulu-Natal', 'KwaZulu-Natal'),
        ('Limpopo', 'Limpopo'),
        ('Mpumalanga', 'Mpumalanga'),
        ('North West', 'North West'),
        ('Northern Cape', 'Northern Cape'),
        ('Western Cape', 'Western Cape'),
    )
    terms = (
        ('Fixed Term', 'Fixed Term'),
        ('Permanent', 'Permanent'),
    )
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=150, unique=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, default=2)
    date_posted = models.DateTimeField(default=timezone.now)
    expect = models.TextField(max_length=150, blank=True)
    description = RichTextUploadingField()
    company_name = models.CharField(max_length=100, blank=True)
    company_email = models.EmailField(blank=True)
    role = models.CharField(max_length=50, blank=True)
    reporting_to = models.CharField(max_length=50, blank=True)
    employment_term = models.CharField(max_length=20,
                                       choices=terms,
                                       blank=True)
    location = models.CharField(max_length=20, choices=locations)
    city = models.CharField(max_length=50, blank=True)
    company_logo = models.FileField(
        upload_to='opportunities/',
        default='/static/images/wecanchangeopportunity.jpg')
    ngo_or_npo = models.ForeignKey(
        Organisation,
        blank=True,
        on_delete=models.CASCADE,
        null=True,
        help_text=u'Assign Opportunity to NGO, NPO or leave blank',
    )
    company = models.ForeignKey(
        Company,
        blank=True,
        on_delete=models.CASCADE,
        null=True,
        help_text=u'Assign Opportunity to Company or leave blank',
    )
    service_provider = models.ForeignKey(
        ServiceProvider,
        blank=True,
        help_text=u'Assign post to Service Provider',
        on_delete=models.CASCADE,
        null=True)

    class Meta:
        verbose_name = u'Jobs'
        verbose_name_plural = u'Jobs'

    def __str__(self):
        return self.name
예제 #6
0
class Post(models.Model):
    """
    Data model for blog posts.
    Модель данных для постов блога.
    """
    STATUS_CHOICES = (('draft', 'черновик'), ('published', 'опубликовано'))
    title = models.CharField(verbose_name='Заголовок поста', max_length=250)
    slug = models.SlugField(max_length=250,
                            blank=True,
                            unique_for_date='date_published')
    author = models.ForeignKey(Author,
                               verbose_name='Автор поста',
                               on_delete=models.CASCADE,
                               related_name='publications_posts')
    category = models.ForeignKey(Category,
                                 verbose_name='Категория',
                                 on_delete=models.CASCADE,
                                 related_name='publications_category')
    post_prevew = RichTextUploadingField(
        verbose_name='Предварительный просмотр поста', max_length=100)
    body = RichTextUploadingField(verbose_name='Содержание поста')
    date_published = models.DateTimeField(verbose_name='Дата публикации поста',
                                          default=timezone.now)
    created = models.DateTimeField(verbose_name='Дата написания поста',
                                   auto_now_add=True)
    updated = models.DateTimeField(verbose_name='Дата обновления поста',
                                   auto_now=True)
    status = models.CharField(verbose_name='Статус',
                              max_length=10,
                              choices=STATUS_CHOICES,
                              default='draft')
    hits = models.IntegerField(verbose_name='Количество просмотров', default=0)
    comments = models.IntegerField(verbose_name='Количество комментариев',
                                   default=0)

    # Model manager
    # Менеджер модели
    published = PublishedManager()

    # Manager tags
    # Менеджер тегов
    tags = TaggableManager()

    class Meta:
        ordering = ('-date_published', )
        verbose_name = 'пост'
        verbose_name_plural = 'посты'
        db_table = 'posts'

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        """
        Overridden standard save() function. Serves for automatic slug
        creation. If the post has no slug, the slugify() function
        automatically forms it from the passed header, after which
        the post object is saved.
        Переопределенная стандартная функция save(). Служит для автоматического
        формирования slug. Если у поста нет слага, функция slugify()
        автоматически формирует его из переданного заголовка, после чего
        происходит сохранение объекта поста.
        """
        if not self.slug:
            self.slug = slugify(unidecode(self.title))
        super(Post, self).save(*args, **kwargs)

    def get_absolute_url(self):
        """
        The function generates direct links.
        Функция формирует прямые ссылки.
        """
        return reverse('publications:post_detail',
                       args=[
                           self.date_published.year, self.date_published.month,
                           self.date_published.day, self.slug
                       ])
예제 #7
0
class Post(models.Model):
    title = models.CharField(max_length=100, )
    slug = models.SlugField(max_length=100, unique=True)
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)
    meta_description = models.TextField(max_length=160, null=True, blank=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL,
                                   on_delete=models.CASCADE,
                                   related_name='updated_by',
                                   null=True,
                                   blank=True)
    description = models.TextField()
    content = RichTextUploadingField()
    category = models.ForeignKey(Category, on_delete=models.PROTECT)
    tags = models.ManyToManyField(Tags, related_name='rel_posts', blank=True)
    status = models.CharField(max_length=10,
                              choices=STATUS_CHOICE,
                              default='Drafted')
    keywords = models.TextField(max_length=500, blank=True)
    image = models.ImageField(upload_to='blog/post/%Y/%m/%D',
                              default='blog/post/post.png')

    class Meta:
        ordering = ['-updated_on']

    def save(self, *args, **kwargs):
        """
        Save method for Post.

        Generate a slug based on the title if the post doesn't exist yet.-
        """

        if not self.pk:
            self._generate_slug()

        super().save(*args, **kwargs)

        if self.image != None:
            img = Image.open(self.image.path)

            if img.height > 450 or img.width > 450:
                output_size = (450, 450)
                img.thumbnail(output_size)
                img.save(self.image.path)

    def __str__(self):
        return self.title

    def is_deletable_by(self, user):
        if self.user == user or user.is_superuser:
            return True
        return False

    def _generate_slug(self):
        """
        Generate a slug based on the title of the post

        If the slug is already taken, one or two digits will be added at the
        end of the slug and will increment as long as the slug already exist
        until reaching a non-existant result.
        The slug is truncated to 57 character in order to add the unique digits
        at the end of it.
        """

        max_length = self._meta.get_field('slug').max_length - 3
        value = self.title
        slug_result = slug_original = \
            slugify(value, allow_unicode=False)[:max_length]

        for i in itertools.count(1):
            if not Post.objects.filter(slug=slug_result).exists():
                break
            slug_result = f'{slug_original}-{i}'

        self.slug = slug_result

    def get_absolute_url(self):
        """Get the absolute url of the object"""
        return reverse("blog:post-detail", kwargs={"slug": self.slug})

    def status_toggle(self):
        """ Toggle beetwen the status"""

        if self.status == 'Drafted':
            self.status = 'Published'
        else:
            self.status = 'Drafted'

        self.save()
예제 #8
0
파일: models.py 프로젝트: grnet/agora-sp
class Resource(models.Model):

    # Basic Information fields
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    erp_bai_0_id = models.CharField(max_length=100, unique=True)
    erp_bai_1_name = models.CharField(max_length=100, unique=True)
    erp_bai_2_organisation = models.ForeignKey(
        Organisation,
        on_delete=models.PROTECT,
        blank=False,
        null=True,
        related_name="organisation_services")
    erp_bai_3_providers = models.ManyToManyField(
        Organisation, blank=True, related_name="provided_services")
    erp_bai_4_webpage = models.EmailField(default=None, blank=False, null=True)

    # Marketing Information fields
    erp_mri_1_description = RichTextUploadingField(max_length=1000,
                                                   default=None,
                                                   blank=True,
                                                   null=True)
    erp_mri_2_tagline = models.TextField(max_length=100,
                                         default=None,
                                         blank=True,
                                         null=True)
    erp_mri_3_logo = models.EmailField(default=None, blank=True, null=True)
    erp_mri_4_mulitimedia = models.EmailField(default=None,
                                              blank=True,
                                              null=True)
    erp_mri_5_use_cases = models.TextField(default=None, blank=True, null=True)

    # Classification information
    erp_cli_1_scientific_domain = models.ManyToManyField(
        Domain, blank=True, related_name='domain_resources')

    erp_cli_2_scientific_subdomain = models.ManyToManyField(
        Subdomain, blank=True, related_name='subdomain_resources')

    erp_cli_3_category = models.ManyToManyField(
        Category, blank=True, related_name='categorized_resources')

    erp_cli_4_subcategory = models.ManyToManyField(
        Subcategory, blank=True, related_name='subcategorized_resources')
    erp_cli_5_target_users = models.ManyToManyField(TargetUser, blank=True)

    erp_cli_6_access_type = models.ManyToManyField(AccessType, blank=True)
    erp_cli_7_access_mode = models.ManyToManyField(AccessMode, blank=True)

    erp_cli_8_tags = models.TextField(max_length=255,
                                      default=None,
                                      blank=True,
                                      null=True)

    # Management Information
    erp_mgi_1_helpdesk_webpage = models.URLField(max_length=255,
                                                 default=None,
                                                 blank=True,
                                                 null=True)
    erp_mgi_2_user_manual = models.URLField(max_length=255,
                                            default=None,
                                            blank=True,
                                            null=True)
    erp_mgi_3_terms_of_use = models.URLField(max_length=255,
                                             default=None,
                                             blank=True,
                                             null=True)
    erp_mgi_4_privacy_policy = models.URLField(max_length=255,
                                               default=None,
                                               blank=True,
                                               null=True)
    erp_mgi_5_access_policy = models.URLField(max_length=255,
                                              default=None,
                                              blank=True,
                                              null=True)
    erp_mgi_6_sla_specification = models.URLField(max_length=255,
                                                  default=None,
                                                  blank=True,
                                                  null=True)
    erp_mgi_7_training_information = models.URLField(max_length=255,
                                                     default=None,
                                                     blank=True,
                                                     null=True)
    erp_mgi_8_status_monitoring = models.URLField(max_length=255,
                                                  default=None,
                                                  blank=True,
                                                  null=True)
    erp_mgi_9_maintenance = models.URLField(max_length=255,
                                            default=None,
                                            blank=True,
                                            null=True)

    # Geographical and Language Availability fields
    erp_gla_1_geographical_availability = models.CharField(max_length=255,
                                                           default=None,
                                                           blank=True,
                                                           null=True)
    erp_gla_2_language = models.TextField(default=None, blank=True, null=True)

    # Resource Location Information
    erp_rli_1_geographic_location = models.TextField(default='Other',
                                                     blank=True,
                                                     null=True)

    # Contact Information
    main_contact = models.ForeignKey(ContactInformation,
                                     blank=True,
                                     null=True,
                                     on_delete=models.SET_NULL,
                                     related_name="main_contact_services")
    public_contact = models.ForeignKey(ContactInformation,
                                       blank=True,
                                       null=True,
                                       on_delete=models.SET_NULL,
                                       related_name="public_contact_services")
    erp_coi_13_helpdesk_email = models.EmailField(default=None,
                                                  blank=True,
                                                  null=True)
    erp_coi_14_security_contact_email = models.EmailField(default=None,
                                                          blank=True,
                                                          null=True)

    # Maturity Information
    erp_mti_1_technology_readiness_level = models.ForeignKey(TRL,
                                                             blank=False,
                                                             null=True)
    erp_mti_2_life_cycle_status = models.ForeignKey(LifeCycleStatus,
                                                    blank=False,
                                                    null=True)
    erp_mti_3_certifications = RichTextUploadingField(default=None,
                                                      blank=True,
                                                      null=True)
    erp_mti_4_standards = RichTextUploadingField(default=None,
                                                 blank=True,
                                                 null=True)
    erp_mti_5_open_source_technologies = RichTextUploadingField(default=None,
                                                                blank=True,
                                                                null=True)
    erp_mti_6_version = models.CharField(max_length=255,
                                         default=None,
                                         blank=True,
                                         null=True)
    erp_mti_7_last_update = models.CharField(max_length=255,
                                             blank=True,
                                             null=True)
    erp_mti_8_changelog = RichTextUploadingField(default=None,
                                                 blank=True,
                                                 null=True)

    # Dependencies Information fields
    required_resources = models.ManyToManyField('self',
                                                blank=True,
                                                symmetrical=False,
                                                related_name='is_required_by')
    related_resources = models.ManyToManyField(
        'self',
        blank=True,
        symmetrical=False,
        related_name='set_as_related_by')
    erp_dei_3_related_platforms = models.TextField(default=None,
                                                   blank=True,
                                                   null=True)

    # Attribution Information
    erp_ati_1_funding_body = models.ManyToManyField(
        FundingBody, blank=True, related_name='funded_body_resources')

    erp_ati_2_funding_program = models.ManyToManyField(
        FundingProgram, blank=True, related_name='funded_program_resources')
    erp_ati_3_grant_project_name = models.CharField(max_length=255,
                                                    default=None,
                                                    blank=True,
                                                    null=True)

    # Access and Order Information
    erp_aoi_1_order_type = models.ForeignKey(OrderType,
                                             blank=True,
                                             null=True,
                                             related_name='resources')
    erp_aoi_2_order = models.URLField(default=None, blank=True, null=True)

    # Financial Information
    erp_fni_1_payment_model = models.URLField(default=None,
                                              blank=True,
                                              null=True)
    erp_fni_2_pricing = models.URLField(default=None, blank=True, null=True)

    state = models.CharField(choices=RESOURCE_STATES,
                             max_length=30,
                             default='draft')

    # Datetime fields
    created_at = models.DateTimeField(auto_now_add=True, null=True)
    updated_at = models.DateTimeField(auto_now=True)
    published_at = models.DateTimeField(blank=True, null=True)

    eosc_id = models.CharField(max_length=255, blank=True, null=True)
    eosc_published_at = models.DateTimeField(blank=True, null=True)
    eosc_updated_at = models.DateTimeField(blank=True, null=True)
    eosc_state = models.CharField(max_length=255, blank=True, null=True)

    def __unicode__(self):
        return str(self.erp_bai_0_id)

    @property
    def erp_bai_2_organisation_public(self):
        if self.erp_bai_2_organisation.state == 'published':
            return self.erp_bai_2_organisation_id
        else:
            return None

    @property
    def erp_bai_3_providers_public(self):
        return self.erp_bai_3_providers.filter(state='published')

    @property
    def erp_cli_3_category_verbose(self):
        return ", ".join(o.name for o in self.erp_cli_3_category.all())

    @property
    def erp_cli_4_subcategory_verbose(self):
        return ", ".join(o.name for o in self.erp_cli_4_subcategory.all())

    @property
    def erp_cli_1_scientific_domain_verbose(self):
        return ", ".join(o.name
                         for o in self.erp_cli_1_scientific_domain.all())

    @property
    def erp_cli_2_scientific_subdomain_verbose(self):
        return ", ".join(o.name
                         for o in self.erp_cli_2_scientific_subdomain.all())

    @property
    def erp_bai_3_providers_verbose(self):
        return ", ".join(o.epp_bai_1_name
                         for o in self.erp_bai_3_providers.all())

    @property
    def required_resources_ids(self):
        return ", ".join(o.erp_bai_0_id for o in self.required_resources.all())

    @property
    def related_resources_ids(self):
        return ", ".join(o.erp_bai_0_id for o in self.related_resources.all())

    @property
    def erp_dei_1_required_resources_public(self):
        return self.required_resources.filter(state='published')

    @property
    def erp_dei_2_related_resources_public(self):
        return self.related_resources.filter(state='published')

    @property
    def erp_cli_5_target_users_verbose(self):
        return ", ".join(o.user for o in self.erp_cli_5_target_users.all())

    def save(self, *args, **kwargs):
        self.erp_bai_0_id = self.erp_bai_0_id.strip()
        self.erp_bai_1_name = self.erp_bai_1_name.strip()
        if self.state == 'published' and not self.published_at:
            self.published_at = timezone.now()
        clean_html_fields(self)
        super(Resource, self).save(*args, **kwargs)

    @property
    def resource_admins_ids(self):
        resource_adminships = ResourceAdminship.objects.filter(
            resource=self, state="approved")
        res = []
        for r in resource_adminships:
            res.append(str(r.admin.pk))
        return ','.join(res)

    @property
    def resource_admins(self):
        resource_adminships = ResourceAdminship.objects.filter(
            resource=self, state="approved")
        res = []
        for r in resource_adminships:
            res.append(r.admin)
        return res

    @property
    def pending_resource_admins_ids(self):
        resource_adminships = ResourceAdminship.objects.filter(resource=self,
                                                               state="pending")
        res = []
        for r in resource_adminships:
            res.append(str(r.admin.pk))
        return ','.join(res)

    @property
    def rejected_resource_admins_ids(self):
        resource_adminships = ResourceAdminship.objects.filter(
            resource=self, state="rejected")
        res = []
        for r in resource_adminships:
            res.append(str(r.admin.pk))
        return ','.join(res)
예제 #9
0
class notification(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    notify = RichTextUploadingField(null=True)
예제 #10
0
class Question(models.Model):
    """
	Question objects store the question and the answers to that question
	There are three types of questions:
		1. MCQs: The options are stored in question.options as a json
		and the correct answer is the index value of the option starting
		from 1.
		2. True or False: The answer is stored as 'T' of 'F'.
		3. Text: The answer is stored as some string.

	answer_options = [
		('T', 'True'),
		('F', 'False),
		('1', 'One'),
		('2', 'Two'),
		('3', 'Three'),
		('4', 'Four'),
		('<str>', '<str>') # This is why we cannot enforce these options
	]
	"""

    QUESTION_TYPE_CHOICES = [('mcq', 'Multiple Choice Question'),
                             ('bool', 'True or False'),
                             ('text', 'Text Answer')]

    class Meta:
        verbose_name = 'Question'
        verbose_name_plural = 'Questions'
        ordering = ['created_on']

    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
    question = RichTextUploadingField()
    explanation = RichTextUploadingField()
    type = models.CharField(max_length=32, choices=QUESTION_TYPE_CHOICES)
    option1 = models.CharField(max_length=512, null=True, blank=True)
    option2 = models.CharField(max_length=512, null=True, blank=True)
    option3 = models.CharField(max_length=512, null=True, blank=True)
    option4 = models.CharField(max_length=512, null=True, blank=True)
    answer = models.CharField(
        max_length=1024,
        verbose_name="Answer",
        help_text="any of the following: T, F, 1, 2, 3, 4 or some text. "
        "For text answers separate multiple correct choices with '|' (pipe) character."
    )
    created_on = models.DateTimeField(default=timezone.now)

    @property
    def options(self):
        return [self.option1, self.option2, self.option3, self.option4]

    def is_answer_valid(self) -> bool:
        if self.type == 'text':
            return True
        answer_options = ('T', 'F', '1', '2', '3', '4')
        if self.answer in answer_options:
            return True
        else:
            return False

    def is_options_valid(self):
        if self.type == 'mcq':
            return any(self.options)
        else:
            return not any(self.options)

    @property
    def is_valid(self) -> bool:
        return self.is_answer_valid() and (self.is_options_valid())

    def get_absolute_url(self):
        return reverse('quiz:question', args=[self.id])

    def clean(self):
        if not self.is_answer_valid():
            raise ValidationError(
                f'Answer must any of the following: T, F, 1, 2, 3, 4 or some text, not {self.answer}'
            )
        if not self.is_options_valid():
            raise ValidationError(
                f'Options must be set only for mcq type! not for {self.type} type'
            )

    def save(self, *args, **kwargs):
        super(Question, self).save(*args, **kwargs)

    def __str__(self):
        return f'question_id: {self.id}'
예제 #11
0
파일: models.py 프로젝트: ivan371/psyc
class Entry(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=250, verbose_name=u'Title')
    content = RichTextUploadingField()
예제 #12
0
class Quiz(PaidObjectMixin):
    """
	A quiz object contains metadata about itself and a m2m field
	to the Question model. For all quizzes we assume that the
	ordering of the questions is unimportant, hence we can use an
	unordered m2m to Questions. Through a related_name attr we can
	also query the database for the quiz(zes) that a question may exist
	in.
	"""

    objects = models.Manager()

    LEVEL_CHOICES = [(None, ''), ('fluent', 'Fluent/Native Speaker'),
                     ('advanced', 'Advanced'),
                     ('intermediate', 'Intermediate'),
                     ('beginner', 'Beginner'),
                     ('any', 'French Learner of any Level')]

    class Meta:
        ordering = [
            '-created_on',
        ]
        verbose_name = 'Quiz'
        verbose_name_plural = 'Quizzes'

    title = models.CharField(max_length=256, verbose_name='Quiz Title')
    slug = models.SlugField(max_length=256, verbose_name='Slug', blank=True)
    description = RichTextUploadingField(config_name='minimal')
    level = models.CharField(max_length=128,
                             verbose_name='French Level',
                             choices=LEVEL_CHOICES)
    thumbnail = models.ImageField(
        upload_to='quiz/thumbnails/',
        null=True,
        blank=True,
        default='quiz/thumbnails/quiz-placeholder.jpg')
    total_time = models.DurationField(verbose_name='Total Time',
                                      default=timedelta(minutes=15))
    tags = TaggableManager()
    active = models.BooleanField(verbose_name='Active', default=True)
    not_for_sale = models.BooleanField(verbose_name='Not For Sale',
                                       default=False)
    created_on = models.DateTimeField(default=timezone.now,
                                      verbose_name='Quiz Created On')

    @property
    def questions(self):
        return Question.objects.filter(quiz=self.id)

    @property
    def question_id_list(self):
        return [question.id for question in self.questions]

    @classmethod
    def get_recent(cls):
        return cls.objects.filter(created_on__gte=(timezone.now() -
                                                   RECENT_TIME_LIMIT))

    def get_start_url(self):
        return reverse('quiz:start', args=[self.slug])

    def get_attempt_url(self, quiz_submission):
        return reverse('quiz:attempt', args=[self.slug, quiz_submission.id])

    def get_checked_url(self, quiz_submission):
        return reverse('quiz:checked', args=[self.slug, quiz_submission.id])

    def get_absolute_url(self):
        return reverse('quiz:buy', args=[self.slug])

    def save(self, *args, **kwargs):
        self.slug = slugify(f"{self.title}-{self.id}")
        super(Quiz, self).save(*args, **kwargs)

    def __str__(self):
        return self.title
예제 #13
0
class NewsEntry(models.Model):
    name = models.TextField()
    icon = models.CharField(max_length=100)
    description = RichTextUploadingField()
예제 #14
0
파일: models.py 프로젝트: zyczyc121/web
class Competition(models.Model):
    CHAMPIONSHIP = 1
    KNOWLEDGE = 2
    category_choice = ((CHAMPIONSHIP, "Championship"), (KNOWLEDGE,
                                                        "Knowledge"))

    evaluation_choice = (('AUC', 'Area Under ROC Curve'),
                         ('RMSE', 'Root of Mean Square Error'),
                         ('PRECISION', 'Precision'), ('RECALL', 'Recall'),
                         ('ACCURACY', 'Accuracy'), ('MAP',
                                                    'Mean Average Precision'),
                         ('NDCG', 'Normalized Discounted Cumulative Gain'),
                         ('SMP', 'SMP cup 2016'), ('SOHU', 'Sohu Luckydata'))

    uid = models.CharField(max_length=50,
                           db_index=True,
                           unique=True,
                           null=True)

    name = models.CharField(max_length=50)
    name_en = models.CharField(max_length=100, null=True)
    description = models.TextField(blank=True)
    description_en = models.TextField(null=True, blank=True)
    host = models.ForeignKey(User, related_name='host_competitions')
    category = models.IntegerField(choices=category_choice)
    award = models.CharField(max_length=10, blank=True)
    sponsor = models.CharField(max_length=100, blank=True)
    sponsor_en = models.CharField(max_length=100, blank=True)

    start_datetime = models.DateTimeField()
    final_submit_datetime = models.DateTimeField()
    end_datetime = models.DateTimeField()
    finalCaculate_datetime = models.DateTimeField(null=True)
    ShowWinner_datetime = models.DateTimeField(null=True)
    valid_end_datetime = models.DateTimeField(null=True)
    winner_start_datetime = models.DateTimeField(null=True)
    winner_end_datetime = models.DateTimeField(null=True)

    max_team_size = models.IntegerField(default=10,
                                        validators=[
                                            validators.MinValueValidator(1),
                                            validators.MaxValueValidator(100)
                                        ])

    allow_overdue_submission = models.BooleanField()
    invisible = models.BooleanField(default=False)
    submit_per_day = models.IntegerField(default=5)
    final_submit_count = models.IntegerField(default=2)
    final_showwinners_count = models.IntegerField(default=50)
    week_winnernum = models.IntegerField(default=1)
    final_showscore_min = models.FloatField(default=0.5)
    evaluation = models.CharField(max_length=10, choices=evaluation_choice)
    evaluate_reverse = models.BooleanField(default=False)
    num_line = models.IntegerField()
    final_num_line = models.IntegerField(null=True)
    public_ratio = models.IntegerField()
    public_truth = models.FileField(upload_to=truth_file_name,
                                    storage=truth_storage)
    private_truth = models.FileField(upload_to=truth_file_name,
                                     storage=truth_storage)
    filetype = models.CharField(max_length=10, default='csv')

    introduction = RichTextUploadingField()
    introduction_en = RichTextUploadingField(null=True)
    rules = RichTextUploadingField()
    rules_en = RichTextUploadingField(null=True)
    data_description = RichTextUploadingField()
    data_description_en = RichTextUploadingField(null=True)
    winners = RichTextUploadingField(null=True, blank=True)
    winners_en = RichTextUploadingField(null=True, blank=True)

    logo = models.ImageField(upload_to=resource_file_name, blank=True)
    banner = models.ImageField(upload_to=resource_file_name, blank=True)

    participants = models.ManyToManyField(
        User,
        through='Participation',
        through_fields=('competition', 'user'),
        related_name='participate_competitions')

    def last_refresh_time(self):
        now = timezone.now()
        delta = datetime.timedelta(days=(now - self.start_datetime).days)
        return self.start_datetime + delta

    def next_refresh_time(self):
        now = timezone.now()
        delta = datetime.timedelta(days=(now - self.start_datetime).days + 1)
        return self.start_datetime + delta

    def ongoing_days(self):
        return (timezone.now() - self.start_datetime).days + 1

    def is_active(self):
        return timezone.now() < self.end_datetime and timezone.now(
        ) >= self.start_datetime

    def is_over(self):
        return timezone.now() > self.end_datetime

    def __str__(self):
        return self.name

    @staticmethod
    def active_competitions():
        now = timezone.now()
        Competition.objects.filter(start_datetime_lte=now, end_datetime_gt=now)

    def has_participant(self, user):
        return self.participants.filter(pk=user.pk).exists()

    def find_team_of_user(self, user):
        try:
            team = Participation.objects.filter(user=user,
                                                competition=self).get().team
            return team

        except ObjectDoesNotExist:
            return None
예제 #15
0
class Disclaimer(models.Model):
    disclaimer_name = models.CharField(max_length=255)
    # disclaimer_details = models.TextField(default="")
    disclaimer_details = RichTextUploadingField()
예제 #16
0
class Post(TimeStampedModel):
    author = ForeignKey(User, on_delete=SET_NULL, null=True)
    title = CharField(_("Post Title"), blank=False, null=True, max_length=255)
    slug = SlugField(unique=True, null=True, blank=True, max_length=500)
    videos = FileField(
        _("Upload Video"),
        upload_to=blog_file_path,
        null=True,
        blank=True,
        validators=[file_validator],
    )
    url = URLField(blank=True, max_length=500, null=True, unique=True)
    pub_date = DateField(
        _("Post Published Date"),
        auto_now=False,
        auto_now_add=False,
        null=True,
        blank=False,
    )
    draft = BooleanField(default=False)
    featured = BooleanField(default=False)
    content = RichTextUploadingField()
    comments = GenericRelation(Comment)
    added_by = CharField(_("added_by"), max_length=555, null=True, blank=True)
    categories = ManyToManyField("category.Category",
                                 help_text="Categorize this item.")
    tags = ManyToManyField("category.Tag", help_text="Tag this item.")
    objects = PostManager()

    def __str__(self):
        return self.title

    @staticmethod
    def autocomplete_search_fields():
        return "title", "author"

    @property
    def readtime(self):
        return str(readtime.of_test(self.content))

    @property
    def get_image_url(self):
        img = self.image_set.first()
        if img:
            return img.image.url
        return img  #None

    class Meta:
        managed = True
        verbose_name = "Post"
        verbose_name_plural = "Posts"
        ordering = ["title", "-pub_date"]

    @property
    def get_related_posts_by_tags(self):
        return Post.objects.filter(tags__in=self.tags.all())[:4]

    # @property
    # def comments(self):
    #     instance = self
    #     return Comment.objects.filter_by_instance(instance)

    @property
    def get_content_type(self):
        instance = self
        content_type = ContentType.objects.get_for_model(instance.__class__)
        return content_type

    def get_absolute_url(self):
        return f"/blogs/{self.slug}"

    def get_update_url(self):
        return f"{self.get_absolute_url}/update"

    def get_delete_url(self):
        return f"{self.get_absolute_url}/delete"
예제 #17
0
class Terms(models.Model):
    terms_name = models.CharField(max_length=255)
    # terms_details = models.TextField(default="")
    terms_details = RichTextUploadingField()
예제 #18
0
class Product(models.Model):

    # Relations
    category = models.ManyToManyField(
        'Category',
        blank=True,
        verbose_name=_('categories'),
    )
    related_product = models.ManyToManyField(
        'self',
        blank=True,
        verbose_name=_('related products'),
    )

    # Attributes
    active = models.BooleanField(_('active'), default=False)
    description = RichTextUploadingField(
        _('description'),
        blank=True,
        null=True,
    )
    description2 = models.TextField(
        _('description2'),
        blank=True,
        null=True,
    )
    background_image = models.ImageField(
        _('background_image'),
        upload_to='product/%Y/%m/%d',
        help_text=
        _("For optimal quality, we recommend that you choose images that are at least 1600px wide"
          ),
    )
    background_image_cropping = ImageRatioField('background_image', '1600x900')
    name = models.CharField(
        _('name'),
        max_length=120,
        unique=True,
    )
    slug = models.SlugField(
        _('slug'),
        editable=False,
        unique=True,
    )
    title = models.CharField(
        _('title'),
        blank=True,
        max_length=120,
        null=True,
    )

    # Meta Data
    created_on = models.DateTimeField(
        _('created on'),
        auto_now_add=True,
        editable=False,
        null=True,
    )
    created_by = models.ForeignKey(
        User,
        on_delete=models.SET_NULL,
        null=True,
        related_name='+',
        verbose_name=_('created by'),
    )
    updated_on = models.DateTimeField(
        _('updated on'),
        auto_now=True,
        editable=False,
        null=True,
    )
    updated_by = models.ForeignKey(
        User,
        blank=True,
        on_delete=models.SET_NULL,
        null=True,
        related_name='+',
        verbose_name=_('updated by'),
    )

    # Meta
    class Meta:
        ordering = ['name']
        verbose_name = _('product')
        verbose_name_plural = _('products')

    # Functions
    def __str__(self):
        return "%s" % (self.name)

    def __unicode__(self):
        return u"%s" % (self.name)

    def get_absolute_url(self):
        return reverse('product:product_detail', kwargs={'slug': self.slug})

    def background_image_cropping_url(self):
        if self.background_image:
            return get_thumbnailer(self.background_image).get_thumbnail({
                'size': (1600, 900),
                'box':
                self.background_image_cropping,
                'crop':
                True,
                'detail':
                True,
            }).url

    def image_tag(self):
        _('image'),
        if self.background_image:
            return mark_safe('<img src="%s" height="100" />' %
                             (self.background_image.url))
        else:
            return "%s" % (_('None'))

    def save(self, *args, **kwargs):
        super(Product, self).save()
        self.slug = slugify(self.name)
        return super(Product, self).save(*args, **kwargs)
예제 #19
0
class Organizacion(models.Model):
    # tipo = models.CharField(max_length=20,choices=ESP_ORG_CHOICES)
    nombre = models.CharField(max_length=255)
    logo = ImageField(upload_to='logos/',
                      blank=True,
                      null=True,
                      help_text='Las dimenciones de la imagen son 200x200')
    objetivo = RichTextUploadingField(
        verbose_name='Descripción de la Organización')
    contacto_1 = models.CharField(max_length=255,
                                  blank=True,
                                  null=True,
                                  verbose_name='Persona de Contacto 1')
    correo_1 = models.CharField(max_length=255,
                                blank=True,
                                null=True,
                                verbose_name='Correo 1')
    telefono_1 = models.CharField(max_length=255,
                                  blank=True,
                                  null=True,
                                  verbose_name='Teléfono 1')
    contacto_2 = models.CharField(max_length=255,
                                  blank=True,
                                  null=True,
                                  verbose_name='Persona de Contacto 2')
    correo_2 = models.CharField(max_length=255,
                                blank=True,
                                null=True,
                                verbose_name='Correo 2')
    telefono_2 = models.CharField(max_length=255,
                                  blank=True,
                                  null=True,
                                  verbose_name='Teléfono 2')
    pais_sede = models.ForeignKey(Pais, verbose_name='País Sede')
    ciudad = models.CharField(
        max_length=255,
        blank=True,
        null=True,
        help_text='Cuidad donde esta ubicada o dirección',
        verbose_name='Ciudad/Dirección')
    location = PlainLocationField(based_fields=['ciudad'],
                                  zoom=5,
                                  blank=True,
                                  null=True,
                                  verbose_name='Ubicación')
    tipo_organizacion = models.CharField(max_length=20,
                                         choices=TIPO_CHOICES,
                                         verbose_name='Tipo de Organización')
    #tipo_actividad = models.ManyToManyField(TipoActividad,verbose_name='Tipo de Actividad')
    participacion_cadena = models.ManyToManyField(
        Participacion, verbose_name='Participación en la Cadena de Valor')
    servicios = models.ManyToManyField(
        ServiciosCadena, verbose_name='Servicios que brinda la Organización')
    ambito_accion = models.CharField(max_length=20,
                                     choices=AMBITO_CHOICES,
                                     verbose_name='Ámbito de Acción')
    paises_labora = models.ManyToManyField(Pais,
                                           related_name='Paises',
                                           verbose_name='Países donde Labora')
    #cobertura = models.CharField(max_length=255,verbose_name='Cobertura Geográfica')
    # periodo_permanencia = models.CharField(max_length=20,choices=PERIODO_CHOICES,verbose_name='Período de Permanencia')
    # intercambio = models.ManyToManyField(IntercambioTecnologia,verbose_name='Intercambio de Tecnología')
    sitio_web = models.URLField(blank=True, null=True)
    miembros = models.IntegerField(blank=True,
                                   null=True,
                                   verbose_name='N° de Miembros/Socio')
    # tamano = models.CharField(max_length=20,blank=True,null=True,verbose_name='Tamaño')
    actualizado = models.DateField(editable=False, auto_now=True)
    slug = models.SlugField(editable=False, max_length=450)
    ratings = GenericRelation(Rating, related_query_name='object_list')
    usuario = models.ManyToManyField(User, blank=True)

    def save(self, *args, **kwargs):
        # if not self.id:
        self.slug = slugify(self.nombre)
        super(Organizacion, self).save(*args, **kwargs)

    def __str__(self):
        return self.nombre

    class Meta:
        verbose_name = 'Organización/Especialista'
        verbose_name_plural = 'Organizaciones/Especialistas'
        ordering = ['-id']
예제 #20
0
class Blog(models.Model):
    title = models.CharField(
        max_length=50,
        validators=[blog_title_validator],
        help_text="This is the title of your blog. (limit to 50 characters)")
    author = models.ForeignKey(to=User, on_delete=models.SET_NULL, null=True)
    create_date = models.DateTimeField(verbose_name='Date Published',
                                       auto_now_add=True,
                                       editable=False)
    upvotes = models.PositiveIntegerField(verbose_name="Upvotes",
                                          editable=False,
                                          default=0)
    downvotes = models.PositiveIntegerField(verbose_name="Downvotes",
                                            editable=False,
                                            default=0)
    short_description = models.TextField(
        blank=True,
        null=True,
        max_length=500,
        help_text=
        "This is the short description that appears in blog list. (Limit to 500 characters)"
    )
    # TODO Put relevant maxlength limit here
    body = RichTextUploadingField(
        blank=True,
        null=True,
        help_text=
        "This is the main content of the blog. You can style the content , put images, videos, code-snippets and a lot more things directly into the editor"
    )
    picture = models.ImageField(
        blank=False,
        upload_to=get_blog_image_upload_path,
        help_text="This picture is the cover image of your blog.")
    slug = models.SlugField(
        max_length=60,
        null=True,
        blank=True,
        help_text=
        "This slug will form the url of your blog. The Url will be blogs/blog/<your username>/<slug>"
    )
    tags = models.ManyToManyField(
        to=Tag,
        blank=True,
        help_text=
        "Please select one or more tags for your blog or create a new tag")
    views = models.PositiveIntegerField(verbose_name="Views",
                                        default=0,
                                        editable=False)

    disqus_identifier = models.BigIntegerField(editable=False, default=0)

    # TODO Improve the procedure of counting views (See the blog detail view)

    class Meta:
        ordering = ['-create_date']
        unique_together = ['slug', 'author']

    def __str__(self):
        return str(self.title) + ' : by ' + str(self.author)

    def was_published_recently(self):
        return self.create_date >= timezone.now() - datetime.timedelta(
            minutes=1)
        # TODO Change this to relevant time duration

    def recount_upvotes(self):
        self.upvotes = self.vote_set.filter(upvote_downvote=1).count()
        self.save()

    def recount_downvotes(self):
        self.downvotes = self.vote_set.filter(upvote_downvote=-1).count()
        self.save()

    def recount_votes(self):
        self.recount_upvotes()
        self.recount_downvotes()

    # TODO Set Cron Job to call recount periodically

    def upvote(self, user):
        vote = Vote(voter=user, blog=self, upvote_downvote=1)
        vote.save()

        self.upvotes += 1
        self.save()

    def unupvote(self, user):
        vote = Vote(voter=user, blog=self, upvote_downvote=0)
        vote.save()

        self.upvotes -= 1
        self.save()

    def downvote(self, user):
        vote = Vote(voter=user, blog=self, upvote_downvote=-1)
        vote.save()
        self.downvotes += 1
        self.save()

    def undownvote(self, user):
        vote = Vote(voter=user, blog=self, upvote_downvote=0)
        vote.save()
        self.downvotes -= 1
        self.save()

    def save(self, *args, **kwargs):
        try:
            super().save()
        except IntegrityError:
            raise ValidationError(
                "You have another blog with either same title or same slug. Please change title of this blog"
            )

        if self.disqus_identifier == 0:
            self.disqus_identifier = 16 * (int(self.id) + 1024)

        if str(self.slug) == "None":
            self.slug = self.title.lower().replace(' ', '-')

        super().save()
예제 #21
0
class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_author')
    published_date = models.DateTimeField()
    title = models.CharField(max_length=200, help_text='Title of the post.')
    body = RichTextUploadingField()
    description = models.CharField(max_length=100, help_text='A short tagline that describes what the reader will be reading about.')
    category = models.ManyToManyField(Category, help_text='The category that the post will be listed under.')
    is_published = models.BooleanField(default=True, help_text='Do you want this post to be published publicly?')
    slug = models.SlugField(unique=True)

    def get_absolute_url(self):
        return reverse('blog_post_page', kwargs={'slug': self.slug})

    def __str__(self):
        return self.title

    def get_categories_formatted_sidebar():
        """ Get the categories and format them for display on the sidebar """
        categories = []
        cats = {}

        # sort through all categories and add them to a dictionary
        for tmp in Category.objects.all():
            count = tmp.post_set.filter(is_published=True).count()
            if count >= 1:
                cats.update({tmp:count})

        # sort the dictionary by value
        cats = dict(sorted(cats.items(), key=operator.itemgetter(1),reverse=True))

        # create the html format for the sidebar
        categories.append('<h3>Categories</h3><ul class="pl-2">')
        for k,v in cats.items():
            categories.append('<li class="list-unstyled"><a href="'+k.get_absolute_url()+'">'+k.title+'</a> <span>('+str(v)+')</span></li>')
        categories.append('</ul>')

        return ''.join(categories)

    def get_categories_formatted_post(self):
        """ Get the categories and format them for display """
        categories = [] 

        for tmp in self.category.all():
            categories.append(prefix_char+'<a href="'+tmp.get_absolute_url()+'">'+tmp.title+'</a>'+suffix_char)

        categories.sort() # sort the categories to be alphabetical order
        return ''.join(categories)

    def get_posts_formatted():
        """ Get the posts and format them for display """
        queried_posts = get_formatted_data(Post.objects.filter(is_published=True).order_by('-published_date'))

        formatted_posts = []

        for year,posts in queried_posts.items():
            formatted_posts.append('<h3>'+str(year)+'</h3>')

            formatted_posts.append('<ul class="post-list mb-5">')
            for count, post in enumerate(posts, 1):
                formatted_posts.append('<li'+(' class="bg-white"' if count % 2 else '')+'>'+post.get_categories_formatted_post()+' <span title="'+str(post.published_date)+'">'+str(post.published_date.strftime('%b %d'))+'</span><a href="'+post.get_absolute_url()+'">'+post.title+'</a></li>')
            
            formatted_posts.append('</ul>')
        return ''.join(formatted_posts)

    def categories(self):
        return ", ".join([str(p.title) for p in self.category.all()])

    class Meta:
        db_table = 'blog_post'
        ordering = ['-published_date']
        verbose_name = 'Post'
        verbose_name_plural = 'Posts'
예제 #22
0
class Cause(TimeStampedModel):
    author = ForeignKey(User, on_delete=SET_NULL, null=True)
    title = CharField(_("Cause Title"), blank=False, null=True, max_length=255)
    slug = SlugField(unique=True, null=True, blank=True, max_length=500)
    image = ResizedImageField(_("Upload Cause Image"),
                              quality=75,
                              force_format='JPEG',
                              size=[1920, 1148],
                              crop=['middle', 'center'],
                              upload_to=cause_file_path,
                              null=True,
                              blank=True)
    pub_date = DateField(
        _("Post Published Date"),
        auto_now=False,
        auto_now_add=False,
        null=True,
        blank=False,
    )
    end_date = DateField(
        _("End Published Date"),
        auto_now=False,
        auto_now_add=False,
        null=True,
        blank=False,
    )
    tt_amount = DecimalField(max_digits=20,
                             decimal_places=2,
                             null=True,
                             blank=True,
                             default=0.00)
    donate = DecimalField(max_digits=20,
                          decimal_places=2,
                          null=True,
                          blank=True,
                          default=0.00)
    max_donation = DecimalField(max_digits=20,
                                decimal_places=2,
                                null=True,
                                blank=True,
                                default=100000.00)
    draft = BooleanField(default=False)
    featured = BooleanField(default=False)
    comments = GenericRelation(Comment)
    content = RichTextUploadingField()
    added_by = CharField(_("added_by"), max_length=255, null=True, blank=True)
    categories = ManyToManyField("category.Category",
                                 help_text="Categorize this item.")
    tags = ManyToManyField("category.Tag", help_text="Tag this item.")
    objects = CauseManager()

    def __str__(self):
        return self.title

    @property
    def get_related_causes_by_tags(self):
        return Cause.objects.filter(tags__in=self.tags.all())[0:4]

    @property
    def readtime(self):
        return str(readtime.of_test(self.content))

    @staticmethod
    def autocomplete_search_fields():
        return "title", "author.title"

    @property
    def avg(self):
        dec = self.tt_amount / self.max_donation
        avg = dec * 100
        return avg

    def save(self, *args, **kwargs):
        if self.max_donation > self.tt_amount:
            self.tt_amount = self.tt_amount + self.donate
        else:
            self.draft = True
            self.featured = False
        super().save(*args, **kwargs)

    class Meta:
        managed = True
        verbose_name = "Cause"
        verbose_name_plural = "Causes"
        ordering = ["title", "-end_date"]

    def get_absolute_url(self):
        return f"/cause/{self.slug}"

    def get_update_url(self):
        return f"{self.get_absolute_url}/update"

    def get_delete_url(self):
        return f"{self.get_absolute_url}/delete"
예제 #23
0
class Blog(Post):
    class Meta:
        ordering = ('-created', )

    short_body = models.TextField(verbose_name='Анонс', blank=True)
    body = RichTextUploadingField(verbose_name='Содержимое', blank=True)
    image = ImageField(verbose_name='Изображение',
                       upload_to='blog',
                       blank=True,
                       null=True,
                       max_length=300)
    category = TreeManyToManyField(Category,
                                   verbose_name='Категория',
                                   db_index=True)
    objects = super_models.PostManager()

    rate_type = 'votes'

    # can_be_rated = True

    def type_str(self):
        return 'Запись блога'

    @property
    def thumb110(self):
        try:
            return get_thumbnail(
                self.image,
                '110x200',
                quality=settings.DEFAULT_THUMBNAIL_QUALITY).url
        except:
            return ''

    @property
    def thumb150(self):
        try:
            return get_thumbnail(
                self.image,
                '150x300',
                quality=settings.DEFAULT_THUMBNAIL_QUALITY).url
        except:
            return ''

    @property
    def thumb220(self):
        try:
            return get_thumbnail(
                self.image,
                '220x400',
                quality=settings.DEFAULT_THUMBNAIL_QUALITY).url
        except:
            return ''

    @property
    def thumb360(self):
        try:
            return get_thumbnail(
                self.image,
                '360x720',
                quality=settings.DEFAULT_THUMBNAIL_QUALITY).url
        except:
            return ''

    @property
    def anons(self):
        if self.short_body:
            return self.short_body
        else:
            return helper.cut_text(strip_tags(self.body), 200)

    @cached_property
    def mark(self):
        try:
            mark = History.objects.filter(
                post=self,
                history_type=super_models.HISTORY_TYPE_POST_RATED,
                deleted=False).aggregate(Count('pk'))['pk__count']
            if mark is None:
                mark = 0
        except:
            mark = 0
        return mark
예제 #24
0
class Courses(models.Model):
    instructor_id = models.ForeignKey(User, on_delete=models.CASCADE)
    course_id = models.CharField(unique=True, blank=True, max_length=10)
    title = models.CharField('Course Title',
                             max_length=200,
                             null=True,
                             blank=True)
    price = models.DecimalField(max_digits=20,
                                decimal_places=2,
                                null=True,
                                blank=True)
    course_short_description = models.TextField('Course details',
                                                max_length=200,
                                                null=True,
                                                blank=True)
    course_long_description = RichTextUploadingField()
    will_learn = RichTextField()
    course_image = models.FileField(
        upload_to=upload_image_path,
        default='assets/default_images/no-image.png')
    course_intro_video = models.FileField(upload_to=upload_image_path,
                                          max_length=500,
                                          null=True,
                                          blank=True)
    course_intro_video_duration = models.CharField(max_length=20,
                                                   null=20,
                                                   blank=True)
    course_complete_duration = models.CharField('Duration', max_length=10)
    course_for = models.CharField(choices=CourseFor,
                                  max_length=20,
                                  default='Select For')
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    subcategory = models.ForeignKey(Subcategory, on_delete=models.CASCADE)
    file = models.FileField(upload_to=upload_image_path, null=True, blank=True)
    active = models.BooleanField(default=True)
    featured = models.BooleanField(default=False)
    locked = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=timezone.now)
    update_time = models.DateTimeField(auto_now=timezone.now)
    slug = models.SlugField(blank=True, unique=True)

    objects = CoursesManager()

    # class Meta:
    #     ordering = ['-created_at']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('course-detail', kwargs={"slug": self.slug})

    def get_absolute_authenticated_user_url(self):
        return reverse('authenticated-courses-detail',
                       kwargs={"slug": self.slug})

    def get_absolute_update_url(self):
        return reverse("update-courses", kwargs={"slug": self.slug})

    def get_absolute_delete_url(self):
        return reverse("delete-courses", kwargs={"slug": self.slug})
예제 #25
0
class Post(models.Model):
    title = models.CharField(max_length=50, verbose_name='文章标题')
    excerpt = models.CharField(max_length=200, verbose_name='文章摘要')
    content = RichTextUploadingField(verbose_name='文章内容')
    click_count = models.PositiveIntegerField(default=0, verbose_name='点击次数')
    is_recommended = models.BooleanField(default=False, verbose_name='是否推荐')
    date_created = models.DateTimeField(auto_now_add=True, verbose_name='发布时间')
    date_modified = models.DateTimeField(auto_now=True, verbose_name='修改时间')
    author = models.ForeignKey(User, on_delete=models.CASCADE,verbose_name='作者')
    category = models.ForeignKey(Category, on_delete=models.CASCADE,verbose_name='分类')
    tag = models.ManyToManyField(Tag, verbose_name='标签')
    cover = ProcessedImageField(upload_to='cover', default='', verbose_name='封面', processors=[ResizeToFill(160, 120)],
                                format='JPEG',
                                options={"quality": 60})
    favours = GenericRelation(Favour, related_query_name='posts')

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = verbose_name
        ordering = ['-date_created']

    def __str__(self):
        return self.title

    def favour_count(self, update=0):
        key = 'post_{}_favour_count'.format(self.id)
        count = cache.get(key)
        if count is None:
            count = self.favours.filter(liked=True).count()
            cache.set(key, count, timeout=300)
        elif update:
            count += update
            cache.set(key, count, timeout=300)
        return count


    def click_increase(self):
        self.click_count += 1
        self.save(update_fields=['click_count'])

    def get_absolute_url(self):
        return reverse('blog:detail', kwargs={'pk': self.pk})

    def to_comments_html(self):
        key = 'post_{}_comments'.format(self.id)
        html = ''
        comments = self.comment_set.all().order_by('-submit_date')[:15]
        for comment in comments:
            comment_html = comment.to_html()
            html += comment_html
        cache.set(key, html, timeout=300)
        return html

    def comment_user_count(self):
        key = "post_{}_comments_user_num".format(self.id)
        user_num = cache.get(key, None)
        if not user_num:
            user_list = []
            key1 = "post_{}_comments_user".format(self.id)
            for comment in self.comment_set.all():
                if not comment.user in user_list:
                    user_list.append(comment.user)
            user_num = len(user_list)
            cache.set(key, user_num, timeout=300)
            cache.set(key1, user_list, timeout=300)
        return user_num

    def comment_count(self):
        key = "post_{}_comments_num".format(self.id)
        comment_num = cache.get(key, None)
        if not comment_num:
            comment_num = self.comment_set.all().count()
            cache.set(key, comment_num, timeout=300)
        return comment_num

    def comment_update(self, new_comment):
        comment_list_html = self.to_comments_html()
        key2 = "post_{}_comments_user".format(self.id)
        key3 = "post_{}_comments_user_num".format(self.id)
        user_list = cache.get(key2, None)
        if user_list:
            if not new_comment.user in user_list:
                user_list.append(new_comment.user)
            user_num = len(user_list)
            cache.set(key3, user_num, timeout=300)
            cache.set(key2, user_list, timeout=300)
        else:
            user_num = self.comment_user_count()
        key4 = "post_{}_comments_num".format(self.id)
        comment_num = cache.get(key4, None)
        if comment_num:
            comment_num += 1
            cache.set(key4, comment_num, timeout=300)
        else:
            comment_num = self.comment_count()
        return  comment_list_html, user_num, comment_num
예제 #26
0
class Careinstructions(models.Model):
    cares_name = models.CharField(max_length=255)
    # cares_details = models.TextField(default="")
    cares_details = RichTextUploadingField()
예제 #27
0
class Product(models.Model):
    def get_populate_from(self):
        return defaultfilters.slugify(unidecode(self.name))

    def get_slugify(value):
        return value.replace(' ', '-')

    name = models.CharField(
        max_length=120,
        verbose_name=_('Product name'),
    )
    category = TreeForeignKey(
        Category,
        verbose_name=_('Category'),
    )
    brand = models.ForeignKey(
        Brands,
        verbose_name=_('Brand'),
    )
    description = RichTextUploadingField(
        blank=True,
        null=True,
        verbose_name=_('Description'),
    )
    owner = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        verbose_name=_('Product Owner'),
        related_name='products',
    )
    created_at = models.DateField(auto_now_add=True)
    available_in_stock = models.BooleanField(
        default=True, verbose_name=_('Available in stock'))
    is_recommended = models.BooleanField(default=False)
    price = models.DecimalField(
        default=Decimal(1),
        decimal_places=2,
        max_digits=10,
        verbose_name=_('Price'),
    )
    is_sale = models.BooleanField(default=False)
    quantity = models.IntegerField(verbose_name=_('Quantity'))
    slug = AutoSlugField(
        populate_from=get_populate_from,
        unique_with=['owner__first_name', 'created_at'],
        slugify=get_slugify,
        always_update=True,
        null=True,
    )
    colors = models.ManyToManyField(Color, blank=True)
    sizes = models.ManyToManyField(Size, blank=True)

    def __str__(self):
        return "{}".format(self.name)

    def get_default_image(self):
        return self.images.first()

    def get_all_images(self):
        return self.images.all()

    def get_price(self):
        currency = _('soum')
        return "{} {}".format(intcomma(int(self.price)), currency)

    def get_reviews(self):
        return self.product_reviews.filter(is_approved=True)

    def get_absolute_url(self):
        return reverse('products:product_detail',
                       args=[self.category.slug, self.slug])

    @property
    def get_related_products(self):
        return Product.objects.filter(category_id=self.category.id)

    def get_sale_price(self):
        try:
            sale = Sale.objects.first()
            sale_percent = sale.percent
        except Sale.DoesNotExist:
            sale_percent = 1
        sale_price = self.price * sale_percent / 100
        return self.price - sale_price

    class Meta:
        verbose_name = _('Product')
        verbose_name_plural = _('Products')
예제 #28
0
class Privacypolicy(models.Model):
    privacypolicy_name = models.CharField(max_length=255)
    # privacypolicy_details = models.TextField(default="")
    privacypolicy_details = RichTextUploadingField()
예제 #29
0
class Ownercamper(models.Model):
    ownercamper = RichTextUploadingField()
    ownercaravan = RichTextUploadingField()

    def __str__(self):
        return self.ownercamper
예제 #30
0
class Article(ModelMeta, models.Model):
    article_title = models.CharField('title', max_length=150)
    description = models.CharField('description', blank=True, max_length=160)
    keywords = models.CharField('keywords', blank=True, max_length=100)
    article_text = RichTextUploadingField('post text')
    author = models.ForeignKey(User,
                               verbose_name="author",
                               default=1,
                               on_delete=models.CASCADE)
    article_section = models.ForeignKey(Section,
                                        on_delete=models.CASCADE,
                                        blank=True,
                                        default=1)
    slug = models.SlugField(max_length=200, blank=True, unique=True)
    pub_date = models.DateTimeField('public date', auto_now_add=True)
    cover = models.ImageField(upload_to='images/',
                              blank=True,
                              default='images/noimage.png')
    tags = models.ManyToManyField('Tag', blank=True, related_name='articles')
    comments = models.ManyToManyField('Comment',
                                      blank=True,
                                      related_name='comment_article')
    # context_object_name = 'articles'
    votes = GenericRelation(LikeDislike, related_query_name='articles')
    thumbnail = ImageSpecField(source='cover',
                               processors=[ResizeToFill(270, 180)],
                               format='JPEG',
                               options={'quality': 60})

    class Media:
        js = [
            '/static/ckeditor/ckeditor-init.js',
        ]

    class Meta:
        verbose_name = "Статья"
        verbose_name_plural = "Статьи"
        ordering = ['-pub_date']

    _metadata = {
        'title': 'article_title',
        'description': 'description',
        'keywords': 'keywords',
        'cover': 'get_meta_image'
    }

    def get_meta_image(self):
        if self.cover:
            return self.cover.url

    def get_absolute_url(self):
        return reverse('articles:post_detail_url', kwargs={'slug': self.slug})

    def get_update_url(self):
        return reverse('articles:post_update_url', kwargs={'slug': self.slug})

    def get_delete_url(self):
        return reverse('articles:post_delete_url', kwargs={'slug': self.slug})

    def post_delete_url(self):
        return reverse('articles:post_delete_url', kwargs={'slug': self.slug})

    def was_published_recently(self):
        return self.pub_date >= (timezone.now() - datetime.timedelta(days=7))

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = gen_slug(self.article_title)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.article_title