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'
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
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
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
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
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
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
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
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
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
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})
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
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 = '文章列表'
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
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
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
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']
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"
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])
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
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'])
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
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
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
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])
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 = '作者'
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
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, )
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
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