Django多表实例学习笔记

Django多表实例学习笔记

在按照菜鸟教程学习Django多表实例部分时遇到的问题

表与表之间的关系可分为以下三种:

一对一: 一个人对应一个身份证号码,数据字段设置 unique。
一对多: 一个家庭有多个人,一般通过外键来实现。
多对多: 一个学生有多门课程,一个课程有很多学生,一般通过第三个表来实现关联。

1.创建模型时的问题

接下来我们来看下多表多实例。

实例

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    pub_date = models.DateField()
    publish = models.ForeignKey("Publish", on_delete=models.CASCADE)
    authors = models.ManyToManyField("Author")


class Publish(models.Model):
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=64)
    email = models.EmailField()


class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.SmallIntegerField()
    au_detail = models.OneToOneField("AuthorDetail", on_delete=models.CASCADE)


class AuthorDetail(models.Model):
    gender_choices = (
        (0, "女"),
        (1, "男"),
        (2, "保密"),
    )
    gender = models.SmallIntegerField(choices=gender_choices)
    tel = models.CharField(max_length=32)
    addr = models.CharField(max_length=64)
    birthday = models.DateField()

需要注意在创建完模型后,对Database进行更新

python manage.py migrate
python manage.py makemigrations app01   #检测app/models.py文件的改动
python manage.py migrate app01          #把上面的改动翻译成sql语句,然后去数据库中执行

更新时报错,提示一些键值无效,并没有创建对应的表app01_author、app01_authordetail、app01_book、app01_book_authors、app01_publish

2.解决方法

菜鸟教程里的没提,如果是按上一步教程做下来,原先的数据库已经失效
所以不要直接更新数据库,将原先错误的数据库db.sqlite3删除,再更新

python manage.py migrate
python manage.py makemigrations app01   #检测app/models.py文件的改动
python manage.py migrate app01          #把上面的改动翻译成sql语句,然后去数据库中执行

创建完成
在这里插入图片描述
进行后续数据插入操作

参考:https://www.runoob.com/django/django-orm-2.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值