Django day08 (一)

多表模型创建分析:
1)作者表:一个作者有姓名和年龄
2)作者信息表: 有作者就有信息,点击作者的名字可以查询他的电话和地址, 作者表对应作者信息表,所以他们之间是一对一对的关系
3)出版社表: 出版社有对应城市地址和邮箱号
4)书籍表: 包含了书名和价格,还有写这本书有哪些作者,一本书可以有多个作者来写,也可以是一个作者写多本书,所以书籍 和作者是多对多的关系;
一本书对应一个出版社, 一个出版社又可以出多本书, 所以书籍和出版社是一对多的关系


用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id
ManyToManyField会自动创建第三张表

*************重点*************
一对一的关系:OneToOneField
一对多的关系:ForeignKey
多对多的关系:ManyToManyField
******************************
在Models创建如下模型
# 出版社表
class Publish(models.Model):
    # id 如果不写,会自动生成,名字叫nid, 并且自增
    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' 加了引号,只要 class AuthorDetail 这个表在这个页面上能找到就行,不需要引用,
    # to ='AuthorDetail'  如果不加引号,就只能写在这个表的上面创建 class 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')  # 出版社的关系一对多
    # 一对多的关系一旦确立,关联字写在多的一方
    author = models.ManyToManyField(to=Author)

    def __str__(self):
        return self.name

猜你喜欢

转载自www.cnblogs.com/zedong/p/9951236.html