models.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from django.contrib import admin
  2. from django.contrib.auth import get_user_model as user_model
  3. from django.contrib.auth.models import User, AbstractUser
  4. from django.db import models
  5. from blog.admin import CommentAdmin
  6. # Create your models here.
  7. User = user_model()
  8. # Create your models here.
  9. class Category(models.Model):
  10. """
  11. Django 要求模型必须继承 models.Model 类。
  12. Category 只需要一个简单的分类名 name 就可以了。
  13. CharField 指定了分类名 name 的数据类型,CharField 是字符型,
  14. CharField 的 max_length 参数指定其最大长度,超过这个长度的分类名就不能被存入数据库。
  15. 然后给name设置了一个'分类'的名称
  16. """
  17. name = models.CharField('分类', max_length=100, unique=True)
  18. seq = models.IntegerField('排序', default=1)
  19. class Tags(models.Model):
  20. """
  21. 标签 Tag 也比较简单,和 Category 一样。
  22. 再次强调一定要继承 models.Model 类!
  23. """
  24. name = models.CharField('标签', max_length=100, unique=True)
  25. class FileRecord(models.Model):
  26. origin_name = models.CharField('源文件名称', max_length=200)
  27. file_name = models.CharField('文件名称', max_length=200)
  28. file_path = models.FilePathField('文件路径', max_length=255)
  29. create_date = models.DateTimeField('创建时间', auto_now_add=True)
  30. suffix = models.CharField('文件类型', max_length=10)
  31. file_net_path = models.CharField('文件网络路径', max_length=200)
  32. class Article(models.Model):
  33. # 文章正文,我们使用了 TextField,并且指定了标题的长度
  34. title = models.CharField('标题', max_length=70)
  35. # 使用 TextField 来存储大段文本,文章摘要,我们指定了最大长度和允许可以为空。
  36. intro = models.TextField('摘要', max_length=200, blank=True)
  37. category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类', default='1')
  38. tags = models.ManyToManyField(Tags, blank=True)
  39. # 存储比较短的字符串可以使用 CharField,但对于文章的正文来说可能会是一大段文本,因此使用 TextField 来存储大段文本。
  40. html_text = models.TextField(blank=True)
  41. markdown_text = models.TextField(blank=True)
  42. # 文章作者,这里 User 是从 django.contrib.auth.models 导入的。
  43. # django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。
  44. # 这里我们通过 ForeignKey 把文章和 User 关联了起来。
  45. # 因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。
  46. user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
  47. # created_time,我们使用了DateTimeField字段,添加了一个auto_now_add参数,自动获取添加时间!
  48. created_time = models.DateTimeField('发布时间', auto_now_add=True)
  49. type_choices = (
  50. (1, "ARTICLE"),
  51. (2, "NEWS"),
  52. (3, "MEDIA"))
  53. type = models.SmallIntegerField(verbose_name="类型", choices=type_choices, default=1)
  54. cover = models.ForeignKey(FileRecord, related_name="cover", on_delete=models.CASCADE, verbose_name='封面',
  55. default='',
  56. blank=True, null=True)
  57. music = models.ForeignKey(FileRecord, related_name="music", on_delete=models.CASCADE, verbose_name='音乐路径',
  58. default='', blank=True, null=True)
  59. status_choices = (
  60. (1, "RELEASE"),
  61. (0, "PADDING"),
  62. (-1, "DELETE"))
  63. status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=1)
  64. is_top = models.BooleanField(verbose_name="是否在首页显示", default=True)
  65. class Comment(models.Model):
  66. article = models.ForeignKey(Article, on_delete=models.CASCADE, verbose_name='评论', default='1')
  67. nick_name = models.CharField('昵称', max_length=100)
  68. avatar = models.URLField('头像', max_length=255)
  69. website = models.URLField('网址', max_length=100)
  70. created_time = models.DateTimeField('创建时间', auto_now_add=True)
  71. email = models.EmailField('Email', null=True, blank=True)
  72. comment = models.TextField('评论', max_length=500, null=False, blank=False)
  73. admin.site.register(Comment, CommentAdmin) # 注册模型 并 按照定制化的形式展示
  74. admin.site.site_title = 'CyberSick.net' # 修改title