Django 模型
封面图
•
2025-10-19
•
Django教程
0
0
0
0
在 Django 中,**模型(Model)** 是用于定义数据库结构的类。Django 使用模型来与数据库进行交互,每个模型类对应数据库中的一张表,模型中的字段对应表中的列。 --- ## 🧱 一、Django 模型的基本结构 ```python from django.db import models class YourModel(models.Model): # 字段定义 name = models.CharField(max_length=100) description = models.TextField() created_at = models.DateTimeField(auto_now_add=True) is_active = models.BooleanField(default=False) def __str__(self): return self.name ``` ### 常见字段类型: | 字段类型 | 说明 | |----------|------| | `CharField` | 字符串,必须指定 `max_length` | | `TextField` | 大段文本 | | `IntegerField` | 整数 | | `BooleanField` | 布尔值 | | `DateTimeField` | 日期和时间,常用 `auto_now_add=True` 或 `auto_now=True` | | `ForeignKey` | 外键关系 | | `ManyToManyField` | 多对多关系 | | `OneToOneField` | 一对一关系 | --- ## 🔗 二、关系字段 ### 1. **外键(ForeignKey)** ```python class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE) ``` - `on_delete=models.CASCADE`:表示当关联对象被删除时,当前对象也被删除。 ### 2. **多对多(ManyToManyField)** ```python class Tag(models.Model): name = models.CharField(max_length=50) class Post(models.Model): title = models.CharField(max_length=100) tags = models.ManyToManyField(Tag) ``` ### 3. **一对一(OneToOneField)** ```python class User(models.Model): name = models.CharField(max_length=100) class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) bio = models.TextField() ``` --- ## 📌 三、模型方法与元信息(Meta) ### 1. `__str__()` 方法 用于在 Django 管理后台或调试时显示对象名称: ```python def __str__(self): return f"{self.name} - {self.id}" ``` ### 2. `Meta` 类 用于设置模型的元数据: ```python class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE) class Meta: ordering = ['-created_at'] # 排序方式 verbose_name = '书籍' verbose_name_plural = '书籍列表' ``` --- ## 🧪 四、模型操作(Django ORM) ### 1. 创建对象 ```python author = Author.objects.create(name="J.K. Rowling") book = Book.objects.create(title="Harry Potter", author=author) ``` ### 2. 查询对象 ```python # 查询所有 books = Book.objects.all() # 查询特定条件 books = Book.objects.filter(author_id=1) # 获取单个对象 book = Book.objects.get(id=1) ``` ### 3. 更新对象 ```python book.title = "New Title" book.save() ``` ### 4. 删除对象 ```python book.delete() ``` --- ## 🔄 五、迁移模型(Migrations) 当你修改了模型后,需要运行以下命令生成并应用迁移: ```bash python manage.py makemigrations python manage.py migrate ``` --- ## ✅ 六、常见问题 ### Q: 如何自定义字段名? 使用 `db_column` 参数: ```python name = models.CharField(max_length=100, db_column='custom_name') ``` ### Q: 如何设置默认值? ```python is_active = models.BooleanField(default=True) ``` ### Q: 如何设置唯一约束? ```python email = models.EmailField(unique=True) ``` --- 如果你有具体的模型需求(比如用户模型、文章模型等),可以告诉我,我可以帮你写一个完整的示例。
上一篇:
Dart语言简介
下一篇:
Django 表单
标题录入,一次不能超过6条
返回顶部
留言
留言
评论