几种关系:
一对一的关系: 一个作者只能有一个作者的详情,就是一对一
多对一的关系: 多本书籍对应一个出版社
多对多的关系: 一本书对应多个作者,一个作者也能对应多书籍
models.CASCADE
- 表示级联
- 一对一的关系 OneToOneField(on_delete=models.CASCADE)
- 多对一的关系 ForeignKey(on_delete=models.CASCADE)
- 多对多的关系 ManyToManyField
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| from django.db import models
class Publisher(models.Model): name = models.CharField("名称", max_length=30) address = models.CharField(max_length=50, verbose_name="地址") city = models.CharField(max_length=10) state_province = models.CharField(max_length=20) country = models.CharField(max_length=50) website = models.URLField()
class Author(models.Model): name = models.CharField(max_length=20)
class AuthorDetail(models.Model): sex = models.BooleanField(max_length=1, choices=((0, "男"), (1, "女"))) email = models.EmailField() address = models.CharField(max_length=50) brithday = models.DateField() author = models.OneToOneField(Author, on_delete=models.CASCADE)
class Book(models.Model): title = models.CharField(max_length=30) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE) publication_date = models.DateField()
|
这里需要注意,就是你之前如果migrate数据库,那么有时候会报错,在进行迁移的时候是加迁移,并不会再创建表格。
定义数据模型的扩展属性 class Meta
:
详细文档:
https://docs.djangoproject.com/zh-hans/3.0/topics/db/models/
https://docs.djangoproject.com/zh-hans/3.0/ref/models/options/
1 2 3 4
| class Meta: verbose_name = "名称" verbose_name_plural = "复数名称" ordering = ['排序字段']
|
数据库同步:
一个目录: migrations
- 里面存放的是makemigrations命令生成的数据库脚本。并且必须要有
__init__.py
文件夹才可以用
一张数据表,在数据库中: app_migrations
- app: app名字
- name: 脚本的文件名称
- applied: 脚本执行的时间
数据库相关的命令:
- flush 清空数据库,比较危险
- makemigrations 生成数据库脚本
- migrate 同步数据库
- showmigrations 查看生成数据库的同步脚本
- sqlflush 查看清空数据库的脚本
- sqlmigrate 查看数据库同步的sql语句
在出现错误的时候可以migrations文件除了__init__.py
删除掉,再删除数据库创建一个新数据库。