Python中怎样定义Django模型_Django模型定义方法

2025-05-05 20

在 Django 中定义模型需要继承 django.db.models.Model 类,并通过类属性定义字段。以下是详细步骤和示例:


1. 基础模型定义

from django.db import models

class Book(models.Model):
    # 定义字段
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    publish_date = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)
    is_published = models.BooleanField(default=True)

    # 可选:定义元数据
    class Meta:
        ordering = ["-publish_date"]  # 默认按发布日期倒序排列

    # 可选:定义对象的人类可读表示
    def __str__(self):
        return f"{self.title} by {self.author}"

2. 字段类型与参数

  • 常用字段类型

    • CharField: 字符串字段 (max_length 必需)
    • TextField: 长文本
    • IntegerField/DecimalField: 整数/小数
    • DateField/DateTimeField: 日期/时间 (auto_now_add=True 可自动记录创建时间)
    • ForeignKey: 外键关联 (on_delete 必需)
    • ManyToManyField: 多对多关联
  • 常用参数

    • default: 默认值
    • unique: 约束
    • blank/null: 表单验证和数据库空值

3. 外键关联示例

class Author(models.Model):
    name = models.CharField(max_length=100)
    country = models.CharField(max_length=50)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(
        Author, 
        on_delete=models.CASCADE,  # 作者删除时级联删除书籍
        related_name="books"       # 反向查询名称(author.books)
    )

4. 自定义方法

class Book(models.Model):
    # ... 字段定义 ...

    # 自定义业务逻辑方法
    def apply_discount(self, percent):
        self.price = self.price * (1 - percent/100)
        self.save()

    # 生成 URL(需在 urls.py 中配置对应路由)
    def get_absolute_url(self):
        from django.urls import reverse
        return reverse("book_detail", args=[str(self.id)])

5. 执行迁移

定义模型后,需生成并应用数据库迁移:

python manage.py makemigrations  # 生成迁移文件
python manage.py migrate         # 执行迁移

完整示例

from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200, verbose_name="标题")
    content = models.TextField(verbose_name="内容")
    author = models.ForeignKey(
        "auth.User", 
        on_delete=models.CASCADE, 
        verbose_name="作者"
    )
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    class Meta:
        verbose_name = "博客"
        verbose_name_plural = "博客"
        ordering = ["-created_at"]

    def __str__(self):
        return self.title

关键点

  1. 继承 models.Model:所有模型必须直接或间接继承此类。
  2. 字段即数据库列:每个类属性对应数据库表中的一列。
  3. 模型元数据:通过 class Meta 定义索引、排序等。
  4. 关系字段:使用 ForeignKey, ManyToManyField, OneToOneField 定义关联。

通过这种方式,Django 会自动生成数据库表并处理 SQL 操作,开发者只需关注业务逻辑。

(本文来源:nzw6.com)

Image

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关