一、创建模型
在Models创建如下模型:
from django.db import models # Create your models here. # 用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id # ManyToManyField会自动创建第三张表 # 一对一的关系:OneToOneField # 一对多的关系:ForeignKey # 多对多的关系:ManyToManyField class Publish(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) addr = models.CharField(max_length=64) email = models.EmailField() class Author(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) # 数据类型 sex = models.IntegerField() # 可以用ForeignKey,但是得设置唯一性约束,会报警告,不建议用,建议用OneToOneField # authordetail=models.ForeignKey(unique=True) # to='AuthorDetail'加引号,这个代表能找到就可以,不用引号,类必须在上面定义 authordetail = models.OneToOneField(to='AuthorDetail', to_field='id') def __str__(self): return self.name class AuthorDetail(models.Model): id = models.AutoField(primary_key=True) phone = models.CharField(max_length=32) addr = models.CharField(max_length=64) class Book(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) price = models.DecimalField(max_digits=5, decimal_places=2) publish = models.ForeignKey(to=Publish, to_field='id') authors = models.ManyToManyField(to=Author) def __str__(self): return self.name
注意事项:
id 字段 是自动添加的
对于外键字段,django会在字段名上添加“_id”来创建数据库中的列名
外键字段ForeignKey 有一个 null=True的设置(它允许外键接受空值NULL),你可以赋值给它none。
二、添加表记录
1、一对多新增数据
# 添加一本北京出版社出版的书 # 方式一 ret=Book.objects.create(name='红楼梦',price=35,publish_id=1) print(ret.name) # 方式二:存对象publish=出版社对象,存到数据库,是一个 id # publish=Publish.objects.get(id=1) # pk是主键,通过主键查找 # publish=Publish.objects.get(pk= 1) # publish=Publish.objects.filter(pk=2).first() # ret=Book.objects.create(name='西游记',price=45.5,publish=publish) # print(ret.name)
# -----一对多添加 pub=Publish.objects.create(name='egon出版社',email='445676@qq.com',city='山东') print(pub) # 为book表绑定和publish的关系 import datetime,time now=datetime.datetime.now().__str__() now = datetime.datetime.now().strftime('%Y-%m-%d') print(type(now)) print(now) # 日期类型必须是日期对象或者字符串形式的2018-09-12(2018-9-12),其它形式不行 Book.objects.create(name='海燕3',price=333.123,publish_date=now,publish_id=2) Book.objects.create(name='海3燕3',price=35.123,publish_date='2018/02/28',publish=pub) pub=Publish.objects.filter(nid=1).first() book=Book.objects.create(name='测试书籍',price=33,publish_date='2018-7-28',publish=pub) print(book.publish.name) # 查询出版了红楼梦这本书出版社的邮箱 book=Book.objects.filter(name='红楼梦').first() print(book.publish.email)