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
    
  • 相关阅读:
    【转】解决在Android设备播放音频与其他应用重音的问题,并监听耳机的控制按钮
    【转】wamp 3.0.6(apache 2.4.23) 403 forbidden 解决办法
    身份证第18位(校验码)的计算方法
    【转】Win10开机密码忘了?教你破解Win10开机密码
    【转】具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能
    钉钉自定义机器人 发送文本 换行 无效果
    屏蔽右键+f12
    【转】理解WebKit和Chromium: JavaScript引擎简介
    第2章 排序 | 第10节 计数排序练习题 && 基数排序
    图像处理-深入探索插值操作
  • 原文地址:https://www.cnblogs.com/junsircoding/p/15665151.html
Copyright © 2011-2022 走看看