Django - Models模型

Django - Models模型 首页 / Django入门教程 / Django - Models模型

模型(Models)是应用程序的数据访问层。默认情况下,每个django应用程序都会获取一个 models.py 文件来创建数据库表。 django框架中的默认数据库引擎是 sqlite3 。可以通过访问项目目录下的 settings.py 进行更改。 Django使用ORM(对象关系映射),使无涯教程能够执行数据库操作而无需编写SQL查询,而是使用简单的python对象。

from django.db import models

模型(models)是一个包含模型类,不同模型字段和字段关系的定义的模块。 要创建表,只需使一个类成为 Model 类的子类即可。

class MyClassname(models.Model): ...

模型字段

Django 2.2版提供26种不同的字段类型以捕获不同的数据格式。为简单起见根据函数而不是按字母顺序对它们进行了分组。

字段类型

  • AutoField
  • BigAutoField
  • UUIDField
  • IntegerField
  • PositiveIntegerField
  • SmallIntegerField
  • PositiveSmallIntegerField
  • BigIntegerField
  • DecimalField
  • FloatField
  • BinaryField
  • BooleanField
  • NullBooleanField
  • CharField
  • TextField
  • EmailField
  • SlugField
  • URLField
  • GenericIPAddressField
  • DateField
  • TimeField
  • DateTimeField
  • DurationField
  • FileField
  • FilePathField
  • ImageField

字段选项

Django字段类型中提供以下参数:

  • null
  • blank
  • choices
  • db_column
  • db_index
  • db_tablespace
  • default
  • editable
  • error_messages
  • help_text
  • primary_key
  • unique
  • unique_for_date
  • unique_for_month
  • unique_for_year
  • verbose_name
  • validators

字段关系

有时,业务逻辑需要不同模型类的属性之间的关系。在Django模型中,它们是三个字段关系: ForeignKey() OneToOneField() ManyToManyField()

Django外键

ForeignKey就像一对多的关系。它需要两个位置参数,即 Classname on_delete 类名是与模型相关的类。 on_delete = models.CASCADE 意味着删除Super类对象时,其所有反射也将被删除,因为ForeignKey也将被删除。例如,当删除以下模型中的Customer对象时,其相关的Order对象也将被删除。

    class Customer(models.Model):
        name = models.CharField(max_length=30)
        def __str__(self):
            return self.name
            
    class Order(models.Model):
        customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
        order_details = models.TextField()
                                

Django OneToOneField 一对一

OneToOneField 与ForeignKey非常相似,不同的是,其外观类似于 unique = True 。 例如,如果一个人只能拥有一个国籍,则可以描述如下:

    class Person(models.Model):
        name = models.CharField(max_length=30)
        def __str__(self):
            return self.name
            
    class Citizenship(models.Model):
        person = models.OneToOneKey(Person, on_delete=models.CASCADE)
        country = models.CharField(max_length=30)
                                

Django ManyToManyField 多对多

多对多关系仅需要一个参数,即与模型相关的类。用下面的例子可以理解:

    class Person(models.Model):
        name = models.CharField(max_length=30)
    
    class Group(models.Model):
        name = models.CharField(max_length=128)
        members = models.ManyToManyField(
            Person,
            through='Membership',
            through_fields=('group', 'person'),
        )
    
    class Membership(models.Model):
        group = models.ForeignKey(Group, on_delete=models.CASCADE)
        person = models.ForeignKey(Person, on_delete=models.CASCADE)
        inviter = models.ForeignKey(
            Person,
            on_delete=models.CASCADE,
            related_name="membership_invites",
        )
        invite_reason = models.CharField(max_length=64)
                                

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学游戏开发 -〔蔡能〕

软件工程之美 -〔宝玉〕

Java性能调优实战 -〔刘超〕

小马哥讲Spring AOP编程思想 -〔小马哥〕

打造爆款短视频 -〔周维〕

说透芯片 -〔邵巍〕

玩转Vue 3全家桶 -〔大圣〕

Dubbo源码剖析与实战 -〔何辉〕

结构学习力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)