rmat(self.name)
# class Meta:
# ordering ='id'
# 书和出版社是,1对1的(ForeignKey(to=)),是需要添加外键的
# 而书和作者是多对多的,一本书可以有多个作者,还有一个作者也可能有多本书,即多对多的时候用(ManyToManyField(to=))
#然后ROM会自动的帮你生成另外的一张表来表示多对多的关系,这个列子生产的另外一个表为author_book;
# 作者
class Author(models.Model):
id = models.AutoField(primary_key=True)
author_name = models.CharField(null=False, max_length=15)
#多对多的
book = models.ManyToManyField(to="Book")
def __str__(self):
return "Publisher_object:{}".format(self.author_name)
详细参考(点我)
3. 一对一 ;比如作者和作者详情,一个作者只能对于自己的作者详情;
1. 什么时候用一对一?
当 一张表的某一些字段查询的比较频繁,另外一些字段查询的不是特别频繁
把不怎么常用的字段 单独拿出来做成一张表 然后用过一对一关联起来
2. 优势
既保证数据都完整的保存下来,又能保证大部分的检索更
3. ORM中的用法
OneToOneField(to="")
举例:作者和作者详情是一对一的;跟一对多,用法相同,只不过detail里面的不能重复;在数据库中也是多一个detail_id 字段
# 作者
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
phone = models.IntegerField()
books = models.ManyToManyField(to="Book", related_name="authors")
detail = models.OneToOneField(to="AuthorDetail")
def __str__(self):
return self.name
# 作者详情
class AuthorDetail(models.Model):
# 爱好
hobby = models.CharField(max_length=32)
# 地址
addr = models.CharField(max_length=128)