zoukankan      html  css  js  c++  java
  • Django 模型迁移小错误

    Django 操作 ORM 小笔记

    报错内容:

    You are trying to add a non-nullable field 'mobile' to user without a default; we can't do that (the database needs something to popula
    te existing rows).
    Please select a fix:

    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
      Select an option:

    models.py内容如下:

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    class User(AbstractUser):
        mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')
        class Meta:
            db_table = 'users'
            verbose_name = '用户'
            verbose_name_plural = verbose_name
        def __str__(self):
            return self.username
    

    这个模型类继承了AbstractUser类,这个类默认提供了很多属性,比如username、first_name、email等,但是没有mobile属性。

    因此这里的mobile是我们自己加的。

    当新加的mobile属性这样写时:

    mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')

    由于没有指定该字段的默认值,即没有指定这个字段是否可以为空,所以django会有这样的提示。

    解决方案:

    方案①

    输入1,手动指定默认值为当前时间(timezone.now为带时区的当前时间,格式:2015-07-10 14:11:19.936835+00:00),迁移就会继续。

    $ python manage.py makemigrations
    
    You are trying to add a non-nullable field 'mobile' to user without a default; we can't do that (the database needs something to popula
    te existing rows).
    Please select a fix:
     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
    Select an option: 1
    Please enter the default value now, as valid Python
    The datetime and django.utils.timezone modules are available, so you can do e.g. 
    
    timezone.now
    
    Type 'exit' to exit this prompt
    >>> timezone.now
    Migrations for 'user':
      easybook/apps/user/migrations/0006_user_mobile.py
        - Add field mobile to user
        
    $ python manage.py migrate
    

    方案②

    输入2,退出当前对话,返回修改mobile属性的指定方式:

    mobile = models.CharField(max_length=11, unique=True, null=True, verbose_name='手机号') # 增加null=True,即允许此字段为空
    
    $ python manage.py makemigrations
    Migrations for 'user':
      easybook/apps/user/migrations/0008_user_mobile.py
        - Add field mobile to user
    $ python manage.py migrate
    
  • 相关阅读:
    Yarn下分片和分块源代码分析
    Yarn下Map数控制
    hadoop中使用的Unsafe.java
    hbase的coprocessor使用(转)
    eclipse插件
    短线及时发现个股机会的七大招数
    hadoop分类输出
    安装ubuntu-tweak
    rabbitmq安装使用
    “-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数(转)
  • 原文地址:https://www.cnblogs.com/junsircoding/p/15665151.html
Copyright © 2011-2022 走看看