文章字段的建立
from django.db import models
from utils.ModelBases import ModelBase
# Create your models here.
class Tag(models.Model):
name = models.CharField(verbose_name='標籤',help_text='輸入標籤',max_length=64)
class Meta:
verbose_name = '標籤'
db_table = 'db_tag'
verbose_name_plural = verbose_name
class Article(ModelBase):
title = models.CharField(verbose_name='文章標題',help_text='文章標題',max_length=150)
content = models.TextField(verbose_name='文章內容',help_text='文章標題')
abstract = models.TextField(verbose_name='摘要',help_text='文章標籤',default=None)
click = models.IntegerField(verbose_name='點擊量',help_text='點擊量',default=0)
like_num = models.IntegerField(verbose_name='點贊數',help_text='點贊數',default=0)
tag = models.ForeignKey('Tag',on_delete=models.SET_NULL,null=True)
class Meta:
ordering=['-update_time','-id']
db_table = 'tb_article'
verbose_name = '文章'
verbose_name_plural = verbose_name
def __str__(self):
return self.title
評論代碼和遞歸解釋
遞歸,用算法的解釋就是系統幫我們壓棧。這個評論的遞歸思想就是不斷地關聯他的上一級用戶。
class Comments(ModelBase):
content = models.TextField(verbose_name='評論',help_text='評論')
author = models.ForeignKey('user.User',on_delete=models.SET_NULL,null=True)
article = models.ForeignKey('blog.Article',on_delete=models.CASCADE)
parent = models.ForeignKey('self',on_delete=models.CASCADE,null=True,blank=True)
class Meta:
ordering = ['-update_time', '-id']
db_table = "tb_comment" # 指明數據庫表名
verbose_name = "評論" # 在admin站點中顯示的名稱
verbose_name_plural = verbose_name # 顯示的複數名稱
def to_dict_data(self):
comment_dict = {
'news_id': self.article.id,
'content_id': self.id,
'content': self.content,
'author': self.author.username,
'update_time': self.update_time.strftime('%Y年%m月%d日 %H:%M'),
'parent': self.parent.to_dict_data() if self.parent else None,
}
return comment_dict
遇到的問題
可能在數據遷移的時候會報錯:django.db.utils.InternalError: (1074, "Column length too big for column 'content' (max = 21845); use BLOB or TEXT instead")
,報這個錯的原因是錯誤的使用CharField,一般文章我們是不會給它限定字數的,所以一般用TextField,如果用CharField,限定的字數過大,就會出現這種情況。解決辦法就是把CharField改成TextField。
再執行遷移的時候如果還是報這個錯誤,我們就要去migrations文件裏面,刪除除init文件的其他文件,然後再執行遷移,這樣,就能成功了。