当前位置:首页 > 行业动态 > 正文

Django 数据库模型类models.py

Django 的数据库模型类在 models.py 文件中定义,用于描述与数据库交互的数据结构。每个模型类通常对应数据库中的一张表,其属性则对应表中的列。

在 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 数据库模型类models.py  第1张

内置方法: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 文件是定义数据库模型类的核心文件,通过在其中定义模型类、字段、方法和关系等,可以轻松地将应用程序中的数据与数据库进行交互和管理。

py
0