如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

(注:本人用的pycharm开发工具)

1、在你要添加新字段的app的 models.py 文件中添加需要新增的字段(book表新增authors字段并和author建立多对多关系,author表新增int类型的age字段):

class book(models.Model):
name=models.CharField(max_length=100)
price=models.IntegerField()
date=models.DateField()
publish=models.ForeignKey('pub',on_delete=models.CASCADE,)
authors=models.ManyToManyField('author')
def __str__(self):
return self.name class author(models.Model):
name=models.CharField(max_length=50)
sex=models.CharField(max_length=10)
age=models.IntegerField()
def __str__(self):
return self.name

2、在工程目录打开命令行窗口输入:python manage.py makemigrations

 此时出现提示,说正在尝试添加非空age字段,需要设置默认值,并提供两个选择 1 or 2 。如图所示:

如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

1) Provide a one-off default now (will be set on all existing rows with a null value for this column)       //立即提供一次性默认值(将在现有的所有行上设置此列的空值)
 2) Quit, and let me add a default in models.py   //     退出,让我在Models.py中添加一个默认值

3、输入:1(这里要求你设置新建字段的默认值,它会在新建这个字段的同时把默认值也添加上去,)

如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

 4、如果我们不想给默认值就设置blank=True和null=True。(因为值age字段是int类型,如果是CharField可以直接输入'',中间没有空格),一样能达到效果,但是不能不设置默认值。

(blank:设置为True时,字段可以为空。设置为False时,字段是必须填写的。字符型字段CharField和TextField是用空字符串来存储空值的。如果为True,字段允许为空,默认不允许.

null:设置为True时,django用Null来存储空值。日期型、时间型和数字型字段不接受空字符串。所以设置IntegerField,DateTimeField型字段可以为空时,需要将blank,null均设为True。

如果为True,空值将会被存储为NULL,默认为False。如果想设置BooleanField为空时可以选NullBooleanField型字段。)

5、然后输入:python manage.py migrate

如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

6、最后我们刷新数据库并查看数据库,此时django自动给我们创建了第三方表,分别为book表和author表设置外键foreign key

如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

新字段也已经加进去了,如果你设置了默认值,原来的这些数据的值都会设为你设置的默认值。

如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?

此时需求完成。

上一篇:php/oracle: 解析oracle表中的NCLOB,CLOB字段里面的内容


下一篇:Oracle中的自连接(self join)-当表中的某一个字段与这个表中另外字段的相关时,我们可能用到自连接。