Django 数据库模型类models.py
- 行业动态
- 2025-02-04
- 9
在 Django 中,models.py
文件用于定义数据库模型类,这些模型类与数据库中的表相对应,以下是关于 Django 数据库模型类models.py
的详细内容:
1、模型类的定义
继承关系:每个模型类都需要继承自django.db.models.Model
,这是 Django 提供的一个基础模型类,它包含了一些通用的字段和方法,如主键字段、保存方法等。
from django.db import models class MyModel(models.Model): field1 = models.CharField(max_length=100) field2 = models.IntegerField()
模型类的元数据:可以通过在模型类内部定义一个Meta
类来指定一些元数据,如数据库表名、默认的权限选项、排序方式等。
class MyModel(models.Model): field1 = models.CharField(max_length=100) field2 = models.IntegerField() class Meta: db_table = 'my_custom_table_name' verbose_name = 'My Model' verbose_name_plural = 'My Models' ordering = ['field1']
字段定义:模型类中的每个属性都对应数据库中的一个字段,需要使用 Django 提供的字段类型来定义,如CharField
(字符型)、IntegerField
(整型)、DateField
(日期型)等,可以为字段指定一些额外的参数,如max_length
(字符型字段的最大长度)、default
(默认值)、null
(是否允许为空)、blank
(表单验证时是否允许为空字符串)等。
class MyModel(models.Model): name = models.CharField(max_length=50, default='') age = models.IntegerField(default=0) is_active = models.BooleanField(default=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
2、模型类的方法
内置方法:Django 的模型类有一些内置的方法,如save()
(保存模型实例到数据库)、delete()
(从数据库中删除模型实例)、refresh_from_db()
(从数据库中重新加载模型实例的数据)等,这些方法可以直接在模型实例上调用,无需手动编写 SQL 语句。
my_instance = MyModel(name='John', age=30) my_instance.save() # 将模型实例保存到数据库 my_instance.delete() # 从数据库中删除模型实例
自定义方法:除了内置方法外,还可以在模型类中定义自定义的方法,以实现特定的业务逻辑,这些自定义方法可以在模型实例上调用,也可以作为模型类的方法在其他位置调用。
class MyModel(models.Model): name = models.CharField(max_length=50) age = models.IntegerField() def get_full_name(self): return f"{self.name} (Age: {self.age})"
3、模型类的关系
一对一关系:使用OneToOneField
字段来定义两个模型类之间的一对一关系,一个用户模型和一个用户详情模型之间可以是一对一关系:
class User(models.Model): username = models.CharField(max_length=50) class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) bio = models.TextField()
一对多关系:使用ForeignKey
字段来定义两个模型类之间的一对多关系,一个博客文章可以有多个评论,而一个评论只能属于一篇文章:
class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() class Comment(models.Model): article = models.ForeignKey(Article, on_delete=models.CASCADE) commenter = models.CharField(max_length=50) comment_text = models.TextField()
多对多关系:使用ManyToManyField
字段来定义两个模型类之间的多对多关系,一个学生可以选修多门课程,而一门课程也可以被多个学生选修:
class Student(models.Model): name = models.CharField(max_length=50) class Course(models.Model): course_name = models.CharField(max_length=100) students = models.ManyToManyField(Student)
4、模型迁移
当定义好模型类后,需要生成迁移文件并应用迁移,以便将模型类的变化更新到数据库中,可以使用以下命令来生成和应用迁移:
python manage.py makemigrations
:根据模型类的变化生成迁移文件。
python manage.py migrate
:将迁移文件中的更改应用到数据库中。
5、示例代码
下面是一个简单的示例,展示了如何在models.py
中定义一个博客文章模型和一个评论模型,并在 Django 的管理后台中注册这两个模型:
from django.db import models from django.contrib import admin class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = 'Blog Article' verbose_name_plural = 'Blog Articles' ordering = ['-pub_date'] def __str__(self): return self.title class Comment(models.Model): article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments') commenter = models.CharField(max_length=50) comment_text = models.TextField() comment_date = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = 'Comment' verbose_name_plural = 'Comments' ordering = ['-comment_date'] def __str__(self): return f"{self.commenter} commented on {self.article}" admin.site.register(Article) admin.site.register(Comment)
Django 的models.py
文件是定义数据库模型类的核心文件,通过在其中定义模型类、字段、方法和关系等,可以轻松地将应用程序中的数据与数据库进行交互和管理。