Django网站开发 模型

一个基本的博客网站通常包含文章(Posts)和评论(Comments)。以下是一些建议的模型设计:

创建 Post 模型:在 portfolio 应用的 models.py 文件中创建一个名为 Post 的模型,其中包含文章标题、内容、创建时间和修改时间等字段。

from django.db import models
from django.utils import timezone

# 创建一个名为Post的模型类
class Post(models.Model):
    # 定义CharField,最大长度为200,表示文章的标题
    title = models.CharField(max_length=200)
    # 定义TextField,表示文章的正文内容
    content = models.TextField()
    # 定义DateTimeField,设置默认值为当前时间
    pub_date = models.DateTimeField(default=timezone.now)
    # 定义DateTimeField,自动设置为最后一次保存对象的时间
    updated_date = models.DateTimeField(auto_now=True)

    # 定义一个特殊方法,返回对象的字符串表示形式,本例中返回文章的标题
    def __str__(self):
        return self.title

创建 Comment 模型:在同一文件中创建一个名为 Comment 的模型,其中包含评论的作者、内容、评论时间和关联的文章等字段。
from django.db import models
from django.utils import timezone

创建一个名为Comment的模型类

class Comment(models.Model):
    # 定义外键,关联到Post模型,on_delete参数表示当关联的Post对象被删除时,也同时删除该评论对象。related_name='comments'表示为Post模型和Comment模型之间的关系设置了一个反向关系的名称,该名称为comments。这样,在查询Post对象时可以通过comments属性访问它的所有评论。例如,如果要获取一个名为post的Post对象的所有评论,可以使用post.comments.all()。
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    # 定义CharField,表示评论的作者,最大长度为100
    author = models.CharField(max_length=100)
    # 定义TextField,表示评论的内容
    content = models.TextField()
    # 定义DateTimeField,表示评论的发布时间,默认为当前时间
    pub_date = models.DateTimeField(default=timezone.now)

	# 定义一个特殊方法,返回对象的字符串表示形式,本例中返回评论作者和评论内容的前50个字符
    def __str__(self):
        return f"{self.author} - {self.content[:50]}"

这里我们使用了 get_object_or_404 函数来获取指定 ID 的文章,如果找不到文章,则返回 404 错误。同时,我们获取了文章的所有评论并按发布时间升序排列。

这里我们使用了 ForeignKey 来表示一篇文章与多个评论之间的关系。related_name 参数可以方便地通过文章获取其所有关联的评论。

迁移数据库:由于我们修改了模型,需要生成迁移文件并应用迁移,以在数据库中创建相应的表结构。运行以下命令:
bash
Copy code
python manage.py makemigrations portfolio
python manage.py migrate
现在我们已经创建了基本的模型结构,接下来我们将继续完善视图、模板和 URL,以便在网站上显示文章和评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值