Example #1
0
class Comment(models.Model):
    name = models.CharField(verbose_name='发布人', max_length=15)
    email = models.EmailField(verbose_name='邮箱')
    created_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    update_time = models.DateTimeField(verbose_name='更新时间', auto_now=True)
    content = models.ForeignKey(Content,
                                on_delete=models.CASCADE,
                                related_name='文章评论',
                                verbose_name='评论文章')
    body = MDTextField(max_length=250, verbose_name='评论内容')
    active = models.BooleanField(default=False, verbose_name='显示评论')

    def __str__(self):
        return 'Comments by {} on {}'.format(self.name, self.content)

    class Meta:
        ordering = ['created_time']
        verbose_name = '评论'
        verbose_name_plural = '评论列表'
        db_table = 'shj_comment'
Example #2
0
class Blog(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL,
                               on_delete=models.CASCADE,
                               null=True)
    title = models.CharField(max_length=100)
    text = MDTextField()
    abstract = models.CharField(max_length=100)
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def save(self):
        self.abstract = self.text[:50]
        super(Blog, self).save()

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
Example #3
0
class Articles(models.Model):
    title = models.CharField(max_length=50, verbose_name='文章标题')
    desc = models.CharField(max_length=100, verbose_name='文章简介', blank=True)
    content = MDTextField()
    comment_num = models.IntegerField(verbose_name='评论数', default=0)
    click_num = models.IntegerField(verbose_name='阅览数', default=0)
    love_num = models.IntegerField(verbose_name='点赞数', default=0)
    add_time = models.DateTimeField(default=datetime.now)

    author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='文章作者')
    classify = models.ForeignKey(Classify, on_delete=models.CASCADE, verbose_name='文章类别')

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'Articles'
        ordering = ['-add_time']
        verbose_name = '文字表'
        verbose_name_plural = verbose_name
Example #4
0
class Blog(models.Model):
    """
    博客内容
    """
    title = models.CharField(max_length=128, verbose_name="标题")
    intro = models.CharField(max_length=255, verbose_name="简介")
    content = MDTextField(verbose_name='编写文章')
    cate = models.ManyToManyField(to='Cate', verbose_name="分类")
    watch = models.IntegerField(verbose_name="访问次数")
    img = models.ImageField(upload_to="blog/%m-%d",
                            default='default/default.jpeg')
    create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)

    class Meta:
        verbose_name = '博客列表'
        verbose_name_plural = verbose_name
        ordering = ['-create_time']

    def __str__(self):
        return self.title
Example #5
0
class Post(models.Model):
    title = models.CharField(max_length=200)
    # body = models.TextField()
    body = MDTextField()

    created_time = models.DateTimeField(default=timezone.now)
    modified_time = models.DateTimeField(auto_now=True)

    # excerpt = models.CharField(max_length=200, blank=True)

    category = models.ForeignKey(Category, on_delete=models.PROTECT)
    tags = models.ManyToManyField(Tag, blank=True)

    author = models.ForeignKey(User, models.PROTECT)

    # click number
    clicks = models.IntegerField(default=0)

    def __str__(self):
        return self.title
Example #6
0
class Article(models.Model):
    title = models.CharField('标题', max_length=50)
    excerpt = models.TextField('摘要', max_length=200, blank=True)
    category = models.ForeignKey(Category,
                                 on_delete=models.DO_NOTHING,
                                 verbose_name='分类',
                                 blank=True,
                                 null=True)
    # 使用外键关联分类表与分类是一对多关系
    tags = models.ManyToManyField(Tag, verbose_name='标签', blank=True)
    # 使用外键关联标签表与标签是多对多关系
    img = models.ImageField(upload_to='cover/',
                            verbose_name='文章封面',
                            blank=True,
                            null=True,
                            default='cover/default.jpg')
    body = MDTextField()
    author = models.ForeignKey(User,
                               on_delete=models.CASCADE,
                               verbose_name='作者')
    """
    文章作者,这里User是从django.contrib.auth.models导入的。
    这里我们通过 ForeignKey 把文章和 User 关联了起来。
    """
    view = models.PositiveIntegerField('阅读量', default=0)
    like = models.PositiveIntegerField('点赞数', default=0)
    collection = models.PositiveIntegerField('收藏数', default=0)
    comment = models.PositiveIntegerField('评论数', default=0)
    created_time = models.DateTimeField('发布时间', auto_now_add=True)
    modified_time = models.DateTimeField('修改时间', auto_now=True)
    is_recommend = models.BooleanField('是否推荐显示', default=False)
    is_release = models.BooleanField('是否发布', default=True)

    class Meta:
        verbose_name = '文章内容'
        verbose_name_plural = verbose_name
        ordering = ("-created_time", )
        # 默认按创建时间倒序排列

    def __str__(self):
        return self.title
Example #7
0
class Article(BaseSchema):
    REC_POS_CHOICES = (
        (1, '图片新闻'),
        (2, '新闻精选'),
    )

    category = models.ForeignKey(Category,
                                 limit_choices_to=Q(category_type=2),
                                 on_delete=models.DO_NOTHING,
                                 verbose_name='栏目')
    info_date = models.DateField('日期', default=timezone.now)
    author = models.CharField(
        '作者',
        max_length=100,
        blank=True,
        null=True,
    )
    title = models.CharField('标题', max_length=200)
    content = MDTextField('内容')
    keywords = models.CharField('关键字', max_length=500, blank=True, null=True)
    intro = models.CharField('简介', max_length=2000, blank=True, null=True)
    cover = models.ImageField(
        '封面',
        help_text='(图片格式:png,图片尺寸:400*300px)',
        upload_to='cover/%Y/%m/%d/',
        blank=True,
        null=True,
    )
    position = models.ManyToManyField(Position,
                                      verbose_name='推荐位',
                                      blank=True,
                                      null=True)
    is_active = models.BooleanField('是否启用', default=False)
    views = models.IntegerField('浏览量', default=0)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title
Example #8
0
class Article(models.Model):
    # 文章ID
    id = models.AutoField(primary_key=True)
    type = models.ForeignKey(ArticleType, on_delete=models.CASCADE)
    # 文章标题
    title = models.TextField()
    # 文章摘要
    content = models.TextField()
    body = MDTextField()
    # 发布时间
    time = models.DateTimeField(auto_now_add=True)
    pic = models.ImageField(upload_to='ArticlePic',
                            default='ArticlePic/DefaultPic.jpg')
    love = models.PositiveIntegerField(default=0)
    is_hot = models.BooleanField(null=True, default=False)

    class Meta:
        db_table = 'Article'

    def __str__(self):
        return self.title
Example #9
0
class Article(models.Model):
    title = models.CharField(max_length=70)
    detail = MDTextField()
    # detail = models.TextField()
    # detail = MediumEditorTextarea()
    trainer = models.ForeignKey(User, on_delete=models.CASCADE)

    user_likes = models.ManyToManyField(
        User,
        related_name="likes",
        blank=True,
    )

    user_favorites = models.ManyToManyField(
        User,
        related_name="favorites",
        blank=True,
    )

    def __str__(self):
        return self.title
Example #10
0
class Article(models.Model):
    """文章"""

    STATUS_CHOICES = (
        ('d', '草稿'),
        ('p', '发表'),
    )
    title = models.CharField('标题', max_length=200, unique=True)
    body = MDTextField()
    created_time = models.DateTimeField(auto_now_add=True)
    modified_time = models.DateTimeField(auto_now=True)
    views = models.PositiveIntegerField('浏览量', default=0)
    article_order = models.IntegerField('排序,数字越大越靠前', blank=False, null=False, default=0)
    category = models.ForeignKey('Category', verbose_name='分类', on_delete=models.CASCADE, blank=False, null=False)
    tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True)

    class Meta:
        ordering = ['-article_order', '-modified_time']

    def __str__(self):
        return self.title
Example #11
0
class Post(models.Model):
    """文章"""
    title = models.CharField(max_length=100)
    body = MDTextField()
    created_time = models.DateTimeField(auto_now_add=True)
    modified_time = models.DateTimeField(auto_now=True)
    excerpt = models.CharField(max_length=100, blank=True)  # 文章摘要,可为空
    category = models.ForeignKey(
        Category, on_delete=True)  # ForeignKey表示1对多(多个post对应1个category)
    tags = models.ManyToManyField(Tag, blank=True)
    views = models.PositiveIntegerField(default=0)  # 阅读量
    good = models.PositiveIntegerField(default=0)  # 点赞数

    class Meta:
        ordering = ['-created_time']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('Post:detail', kwargs={'pk': self.id})
Example #12
0
class MyBlog(models.Model):
    title = models.CharField(max_length=100, verbose_name='文章标题')
    content = MDTextField(verbose_name='文章内容')
    blog_type = models.ForeignKey(BlogType,
                                  on_delete=models.DO_NOTHING,
                                  verbose_name='文章类型')
    author = models.ForeignKey(settings.AUTH_USER_MODEL,
                               on_delete=models.DO_NOTHING,
                               verbose_name='作者')

    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='删除标记')

    def __str__(self):
        return '文章:%s' % self.title

    class Meta:
        db_table = 'ty_MyBlog'
        verbose_name = '文章'
        verbose_name_plural = verbose_name
Example #13
0
class Article(models.Model):
    title = models.CharField(verbose_name='标题',max_length=70)
    body = MDTextField(verbose_name='正文',blank=True,null=True)
    abstract = models.TextField(verbose_name='简介',blank=True,null=True)
    create_time = models.DateTimeField(verbose_name='创建时间',default=now)
    views = models.PositiveIntegerField(verbose_name='浏览量',default=0)
    last_mod_time = models.DateTimeField(verbose_name='修改时间',default=now)
    tags = models.ManyToManyField(Tag,verbose_name='标签集合',blank=True)
    category = models.ForeignKey(Category,verbose_name='分类',on_delete=models.CASCADE,blank=False,null=False)

    def __str__(self):
        return self.title

    def viewed(self):
        self.views += 1
        self.save(update_fields=['views'])

    class Meta:
        ordering = ['-create_time']
        verbose_name = '文章'
        verbose_name_plural = '文章列表'
Example #14
0
class Article(models.Model):
    title = models.CharField('标题', max_length=70)
    digest = models.TextField('摘要', max_length=200, blank=True)
    category = models.ForeignKey(Category,
                                 on_delete=models.DO_NOTHING,
                                 verbose_name='分类',
                                 blank=True,
                                 null=True)
    tag = models.ManyToManyField(Tag, verbose_name='标签', blank=True)
    body = MDTextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
    views = models.PositiveIntegerField('阅读量', default=0)
    create_time = models.DateTimeField('发布时间', auto_now_add=True)
    update_time = models.DateTimeField('修改时间', auto_now=True)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章'

    def __str__(self):
        return self.title
Example #15
0
class Post(models.Model):
    tags = models.ManyToManyField(Tag, blank=True)
    title = models.CharField(max_length=150)
    content = MDTextField()
    description = models.TextField(blank=True)
    image = models.ImageField(upload_to='media/', null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    published_at = models.DateTimeField(blank=True, null=True)
    is_public = models.BooleanField(default=False)

    class Meta:
        ordering = ["-created_at"]  #作成日時の降順で表示

    def save(self, *args, **kwargs):
        if self.is_public and not self.published_at:
            self.published_at = timezone.now()
        super().save(*args, **kwargs)  #はじめて記事公開のとき現在の日時を保存

    def __str__(self):
        return self.title
Example #16
0
class News(models.Model):
    news_id = models.AutoField(primary_key=True, verbose_name='文章ID')
    user = models.ForeignKey(Users,
                             on_delete=models.CASCADE,
                             verbose_name='用户')
    category = models.ForeignKey(Category,
                                 on_delete=models.CASCADE,
                                 verbose_name='类别')
    title = models.CharField(max_length=20, null=False, verbose_name='标题')
    content = MDTextField(verbose_name='内容')
    publish_time = models.DateTimeField(verbose_name='发布时间', auto_now_add=True)
    clicked = models.PositiveIntegerField(verbose_name='点击数', default=0)
    attachment = models.FileField(max_length=100, verbose_name='封面图片')
    enabled = models.BooleanField(default=False)

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title
Example #17
0
class Blog(models.Model, ReadNumExpandMethod):
    title = models.CharField(max_length=50)
    blog_type = models.ForeignKey(BlogType, on_delete=models.CASCADE)
    content = MDTextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    read_details = GenericRelation(ReadDetail)
    created_time = models.DateTimeField(auto_now_add=True)
    last_updated_time = models.DateTimeField(auto_now=True)

    def get_url(self):
        return reverse('blog_detail', kwargs={'blog_pk': self.pk})

    def get_email(self):
        return self.author.email

    def __str__(self):
        return "<Blog: %s>" % self.title

    # 默认排序 :created-time降序排列
    class Meta:
        ordering = ['-created_time']
Example #18
0
class Comment(models.Model):
    class Meta:
        abstract = True
        verbose_name = '评论Model'
        verbose_name_plural = verbose_name

    author = models.ForeignKey('my_accounts.SiteUser',
                               on_delete=models.CASCADE,
                               related_name='comment_user')
    context = MDTextField(verbose_name='评论内容')
    create_time = models.DateTimeField(verbose_name='评论时间', auto_now_add=True)
    user_name = models.CharField(max_length=50, verbose_name='评论者')
    user_img = models.CharField(max_length=200, verbose_name='评论者头像位置')

    def save(self, *args, **kwargs):
        self.user_name = self.author.username
        self.user_img = self.author.user_img.url
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.author.username}'s comments"
Example #19
0
class Article(models.Model):
    """博客文章"""
    title = models.CharField('标题', max_length=200, unique=True)
    body = MDTextField()
    create_time = models.DateTimeField('创建时间', default=now)
    update_time = models.DateTimeField('更新时间', default=now)
    views = models.IntegerField('浏览量', default=0)

    author = models.ForeignKey(settings.AUTH_USER_MODEL,
                               on_delete=models.CASCADE,
                               verbose_name='作者',
                               blank=False,
                               null=False)
    category = models.ForeignKey('Category',
                                 on_delete=models.CASCADE,
                                 verbose_name='分类',
                                 blank=False,
                                 null=False)
    tags = models.ManyToManyField(
        'Tag',
        verbose_name='标签',
        blank=True,
    )

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = verbose_name

    def next_article(self):
        return Article.objects.filter(id__gt=self.id).order_by('id').first()

    def prev_article(self):
        return Article.objects.filter(id__lt=self.id).first()

    def viewed(self):
        self.views += 1
        self.save(update_fields=['views'])

    def get_absolute_url(self):
        return reverse('articles:article_detail', args=[self.id])
Example #20
0
class Content(models.Model):
    SORT = (
        ('bgm','브금'),('setting','옵션'),('game','술게임'),('cheers','건배사'),('alcohol','폭탄주'),
    )
    
    STATUS_CHOICES = (
        ('d', 'draft'),
        ('p', 'published'),
        ('w', 'withdrawn')
    )

    title = models.CharField(max_length = 200)
    publisher = models.ForeignKey(User, on_delete=models.CASCADE)
    body = MDTextField(blank=True, null=True)
    updated_at = models.DateTimeField(auto_now_add = True)
    tag = models.ManyToManyField(Tag,related_name='hashtag', blank=True)
    like = models.ManyToManyField(User,related_name='likers',blank=True)
    bookmark = models.ManyToManyField(User,related_name='bookmarks',blank=True)
    summary = models.CharField(max_length = 50, blank=True, null=True)
    difficulty = models.IntegerField(null=True,default=1, blank=True)
    image = models.ImageField(upload_to="content/", blank=True, null=True)
    sort = models.CharField(max_length=10,choices=SORT,default='술게임')
    audio = models.FileField(upload_to="audio/", blank = True, null = True)

    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='d')

    def __str__(self):
        return self.title + "[" + self.sort + "]"
    
    def like_count(self):
        return self.like.count()

    def bookmark_count(self):
        return self.bookmark.count()

    def get_represent_user(self):
        ret = ""
        if len(self.like.all()) > 0:
            ret = self.like.all()[0].username
        return ret
Example #21
0
class Post(models.Model):  # 文章
    title = models.CharField('标题', max_length=70)  # 文章标题
    body = MDTextField('正文')  # 文章正文
    created_time = models.DateTimeField('创建时间', default=timezone.now)  # 文章创建时间
    modified_time = models.DateTimeField('修改时间')  # 文章最后一次修改时间
    excerpt = models.CharField('摘要', max_length=200, blank=True)  # 文章摘要,可以为空
    category = models.ForeignKey(Category,
                                 verbose_name='分类',
                                 on_delete=models.CASCADE)  # 文章分类
    tags = models.ManyToManyField(Tag, verbose_name='标签', blank=True)  # 文章标签
    author = models.ForeignKey(User,
                               verbose_name='作者',
                               on_delete=models.CASCADE)  # 文章作者
    reading = models.PositiveIntegerField(default=0, editable=False)  # 阅读量

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

    def save(self, *args, **kwargs):  # 保存模型实例数据到数据库的逻辑
        self.modified_time = timezone.now()
        md = markdown.Markdown(
            extensions=[  # 先实例化一个MD类,用于渲染body文本  由于摘要不需要生成文章目录,所以没有写
                'markdown.extensions.extra',
                'markdown.extensions.codehilite',
            ])
        # 先将MD文本渲染HTML文本,strip_tags去掉HTML文本的全部HTML标签 再从文本中摘取前54个字符赋值excerpt
        self.excerpt = strip_tags(md.convert(self.body))[:54]
        super().save(*args, **kwargs)

    def __str__(self):
        return self.title

    def get_absolute_url(self):  # 获取绝对路径  自定义
        return reverse('personal_blog:detail', kwargs={'pk': self.pk})

    def increase_reading(self):  # 阅读量方法
        self.reading += 1
        self.save(update_fields=['reading'])
Example #22
0
class ArticlePost(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    column = models.ForeignKey(ArticleColumn,
                               null=True,
                               blank=True,
                               on_delete=models.CASCADE,
                               related_name='acticle')
    likes = models.PositiveIntegerField(default=0)
    title = models.CharField(max_length=100)
    body = MDTextField()
    avatar = models.ImageField(upload_to='article/%Y%m%d/', blank=True)
    created = models.DateTimeField(default=timezone.now)
    update = models.DateTimeField(auto_now=True)
    total_views = models.PositiveIntegerField(default=0)
    tags = TaggableManager(blank=True)
    '''avatar = ProcessedImageField(
        upload_to='article/%Y%m%d',
        processors=[ResizeToFit(width=400)],
        format='JPEG',
        options={'quality': 100},
    )'''
    class Meta:
        ordering = ('-created', )

    def __str__(self):
        return self.title

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

    def save(self, *args, **kwargs):
        article = super().save(*args, **kwargs)
        if self.avatar and not kwargs.get('update_fields'):
            image = Image.open(self.avatar)
            (x, y) = image.size
            new_x = 400
            new_y = int(new_x * (y / x))
            resized_image = image.resize((new_x, new_y), Image.ANTIALIAS)
            resized_image.save(self.avatar.path)
        return article
Example #23
0
class Todo(models.Model):
    """待办任务模型"""

    PROCESS_STATUS = [
        ('T', '待办'),
        ('F', '跟进'),
        ('C', '完成'),
    ]

    todo = models.CharField('待办任务', max_length=100)
    text = MDTextField('备注', blank=True)
    
    owner = models.ForeignKey(User, related_name = 'todo_owner', verbose_name='主人', on_delete=models.CASCADE)
    community = models.ManyToManyField(Community, verbose_name='圈子', blank=True)
    follower = models.ManyToManyField(User, related_name = 'todo_follower', verbose_name='关注人', blank=True)

    is_week_todo = models.BooleanField('周重点')

    process_status = models.CharField(
        max_length=1,
        choices=PROCESS_STATUS,
        default='T',
        verbose_name='状态'
    )
    status = models.BooleanField('已完成')
    priority = models.ForeignKey(Priority, verbose_name='优先级', on_delete=models.CASCADE)

    start_time = models.DateTimeField('开始时间', blank=True, null=True)
    finish_time = models.DateTimeField('完成时间', blank=True, null=True)
    due_time = models.DateTimeField('截止时间', blank=True, null=True)

    created_time = models.DateTimeField('创建时间', auto_now_add=True)
    last_modified_time = models.DateTimeField('修改时间', auto_now=True)

    class Meta:
        verbose_name = '待办任务'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.todo
Example #24
0
class Article(models.Model):
    
    title = models.CharField(max_length=200, verbose_name='标题')  # 博客标题
    category = models.ForeignKey('Category', verbose_name='文章类型', on_delete=models.CASCADE)
    date_time = models.DateField(auto_now_add=True, verbose_name='日期')  # 博客日期
    content = MDTextField(blank=True, null=True, verbose_name='正文')  # 文章正文
    digest = models.TextField(blank=True, null=True, verbose_name='摘要')  # 文章摘要
    author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE, default=get_default_author)
    view = models.BigIntegerField(default=0, verbose_name='阅读数')  # 阅读数
    comment = models.BigIntegerField(default=0, verbose_name='评论数')  # 评论数
    picture = models.CharField(max_length=200, verbose_name='图片地址')  # 标题图片地址
    tag = models.ManyToManyField(Tag, verbose_name='标签')  # 标签

    def __str__(self):
        return self.title

    def sourceUrl(self):
        source_url = settings.HOST + '/blog/detail/{id}'.format(id=self.pk)
        return source_url  # 给网易云跟帖使用

    def viewed(self):
        """
        增加阅读数
        :return:
        """
        self.view += 1
        self.save(update_fields=['view'])

    def commenced(self):
        """
        增加评论数
        :return:
        """
        self.comment += 1
        self.save(update_fields=['comment'])

    class Meta:  # 按时间降序
        ordering = ['-date_time']
        verbose_name = "文章"
        verbose_name_plural = verbose_name
Example #25
0
class ArticlePost(models.Model):
    author = models.ForeignKey(User,
                               on_delete=models.CASCADE,
                               related_name='article')
    title = models.CharField(max_length=200, verbose_name='标题')
    slug = models.CharField(max_length=500, verbose_name='网络标题')
    column = models.ForeignKey(ArticleColumn,
                               on_delete=models.CASCADE,
                               related_name='article_column',
                               verbose_name='栏目')
    body = MDTextField(verbose_name='内容')
    created = models.DateTimeField(default=timezone.now(), verbose_name='创建时间')
    updated = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    users_like = models.ManyToManyField(User,
                                        related_name='articles_like',
                                        blank=True)

    article_tag = models.ManyToManyField(ArticleTag,
                                         related_name='article_tag',
                                         blank=True)

    class Meta():
        db_table = 'user_post'
        ordering = ('-updated', )
        verbose_name = verbose_name_plural = '帖子'
        index_together = (('id', 'slug'))  # 3 建立索引

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):  # 4
        self.slug = slugify(self.title)  # 5
        super(ArticlePost, self).save(*args, **kwargs)

    def get_absolute_url(self):  # 6
        # 获取文章对象的url
        return reverse('article:article_detail', args=[self.id, self.slug])

    def get_url_path(self):
        return reverse('article:article_content', args=[self.id, self.slug])
Example #26
0
class BlogInfo(models.Model):
    b_title = models.CharField(verbose_name='博客标题', max_length=128)
    # 在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,
    # 此参数为了避免两个表里的数据不一致问题
    b_author = models.ForeignKey('AuthorInfo', on_delete=models.CASCADE)
    b_introduction = models.CharField(max_length=128)
    b_read_vol = models.IntegerField(verbose_name='阅读量', default=0)
    b_thumbs = models.IntegerField(verbose_name='点赞量', default=0)
    b_content = MDTextField()
    b_category = models.ForeignKey('CategoryInfo', on_delete=models.CASCADE)
    b_pub_date = models.DateField(auto_now_add=True)
    b_upd_date = models.DateField(auto_now=True)
    b_cover = models.ImageField(upload_to='blog')

    def __str__(self):
        return self.b_title

    class Meta:
        db_table = 'blog_info'
        ordering = ['id']

    b_author.short_description = '作者'
Example #27
0
class Comment(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL,
                               on_delete=models.CASCADE,
                               related_name='%(class)s_related',
                               verbose_name='评论人',
                               null=False,
                               default='2')
    create_date = models.DateTimeField('创建时间', auto_now_add=True)
    content = MDTextField('评论内容')
    parent = models.ForeignKey('self',
                               verbose_name='父评论',
                               on_delete=models.CASCADE,
                               related_name='%(class)s_child_comments',
                               blank=True,
                               null=True)
    rep_to = models.ForeignKey('self',
                               verbose_name='回复',
                               on_delete=models.CASCADE,
                               related_name='%(class)s_rep_comments',
                               blank=True,
                               null=True)

    class Meta:
        '''这是一个元类,用来继承的'''
        abstract = True

    def __str__(self):
        return self.content[:20]

    def content_to_markdown(self):
        # 先转换成emoji然后转换成markdown,'escape':所有原始HTML将被转义并包含在文档中
        to_emoji_content = emoji.emojize(self.content, use_aliases=True)
        to_md = markdown.markdown(to_emoji_content,
                                  safe_mode='escape',
                                  extensions=[
                                      'markdown.extensions.extra',
                                      'markdown.extensions.codehilite',
                                  ])
        return to_md
Example #28
0
class Issue(models.Model):
    belong_to = models.ForeignKey(
        'RepoModel', default=None, on_delete=models.PROTECT)
    # Title of Issue
    title = models.CharField(
        max_length=100)
    # Content of issue
    content = MDTextField()
    update_time = models.DateTimeField()
    user = models.ForeignKey(User, default=None, on_delete=models.PROTECT)
    # Indicate whether a issue has been solved
    SOLVED = 'T'
    UNSOLVED = 'F'
    SOLVED_CHOICES = [
        (SOLVED, 'solved'),
        (UNSOLVED, 'unsolved'),
    ]
    solved_state = models.CharField(
        max_length=1,
        choices=SOLVED_CHOICES,
        default=UNSOLVED,
    )
Example #29
0
class Article(models.Model):
    author = models.ForeignKey(User,
                               on_delete=models.CASCADE,
                               verbose_name='作者')
    title = models.CharField(max_length=150, verbose_name='文章标题')
    content = MDTextField(verbose_name='文章内容')
    create_at = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    update_at = models.DateTimeField(verbose_name='修改时间', auto_now=True)
    categories = models.ForeignKey(Category,
                                   on_delete=models.CASCADE,
                                   verbose_name='文章分类')
    tags = models.ManyToManyField(Tag,
                                  verbose_name='标签',
                                  related_name='article')

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

    def __str__(self):
        return self.title
Example #30
0
class Post(models.Model):
    #标题
    title = models.CharField('标题', max_length=70)

    #主体
    body = MDTextField('正文')

    #创建时间
    created_time = models.DateField('创建时间', default=timezone.now)

    #修改时间
    modified_time = models.DateField('修改时间')

    #文章摘要,可以没有
    post_abstract = models.CharField('摘要', max_length=200, blank=True)

    #类别,作为外键与外面的类别连接起来
    category = models.ForeignKey(Category, verbose_name='分类', on_delete=models.CASCADE)

    #标签,用多对多的关系与外面的标签连接起来
    tags = models.ManyToManyField(Tag, verbose_name='标签', blank=True)

    #作者,从django.contrib.auth.models导入User
    author = models.ForeignKey(User, verbose_name='作者', on_delete=models.CASCADE)

    def save(self, *args, **kwargs):
        self.modified_time = timezone.now()
        super().save(*args, **kwargs)

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

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

    def __str__(self):
        return self.title