(注:本人用的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 。如图所示:
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(这里要求你设置新建字段的默认值,它会在新建这个字段的同时把默认值也添加上去,)
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
6、最后我们刷新数据库并查看数据库,此时django自动给我们创建了第三方表,分别为book表和author表设置外键foreign key
新字段也已经加进去了,如果你设置了默认值,原来的这些数据的值都会设为你设置的默认值。
此时需求完成。