文章目录
- 关联关系
- Many-to-one relationships
- Many-to-many relationships¶
- django学习——model中的get和filter方法的区别
模型
模型是您的数据唯一而且准确的信息来源。它包含您正在储存的数据的重要字段和行为。一般来说,每一个模型都映射一个数据库表。
基础:
- 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
- 模型类的每个属性都相当于一个数据库的字段。
- 综上诉说,Django 给你一个自动生成访问数据库的 API;请参阅 进行查询。
关联关系
Many-to-one relationships
定义一个多对一的关联关系,使用 django.db.models.ForeignKey 类。就和其他 Field 字段类型一样,只需要在你模型中添加一个值为该类的属性。
from django.db import models# Create your models here.
from django.db import models#多对一关系(如果一个 Car 模型 有一个制造者 Manufacturer --就是说一个 Manufacturer 制造许多辆车,但是每辆车都属于某个特定的制造者)
class Manufacturer(models.Model):pass#....
class Car(models.Model):manufacturer = models.ForeignKey(Manufacturer,on_delete=models.CASCADE)#...
Many-to-many relationships¶
定义一个多对多的关联关系,使用 django.db.models.ManyToManyField 类。就和其他 Field 字段类型一样,只需要在你模型中添加一个值为该类的属性。
如果你只是想要一个类似于记录披萨和配料之间混合和搭配的简单多对多关系,标准的 ManyToManyField 就足够你用了。然而,有的时候你可能会需要在两个模型的关系中记录更多的数据。
举例来讲,考虑一个需要跟踪音乐人属于哪个音乐组的应用程序。在人和他们所在的组之间有一个多对多关系,你可以使用 ManyToManyField 来代表这个关系。然而,你想要记录更多的信息在这样的所属关系当中,比如你想要记录某人是何时加入一个组的。
对于这些情况,Django允许你指定用于控制多对多关系的模型。你可以在中间模型当中添加而外的字段。在实例化 ManyToManyField 的时候使用 through 参数指定多对多关系使用哪个中间模型。对于我们举的音乐家的例子,代码如下:
from django.db import modelsclass Person(models.Model):name = models.CharField(max_length=128)def __str__(self):return self.nameclass Group(models.Model):name = models.CharField(max_length=128)members = models.ManyToManyField(Person, through='Membership')def __str__(self):return self.nameclass Membership(models.Model):person = models.ForeignKey(Person, on_delete=models.CASCADE)group = models.ForeignKey(Group, on_delete=models.CASCADE)date_joined = models.DateField()invite_reason = models.CharField(max_length=64)
具体的参考:
官方文档:(https://docs.djangoproject.com/zh-hans/2.1/topics/db/models/#automatic-primary-key-fields)
django学习——model中的get和filter方法的区别
django的get方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。
django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。